2017-04-20 137 views
0

我试图编写一个powershell cmdlet来查找文件中行中的多个单词。例。我需要解析“word1”,“word2”,“word3”与文件的同一行。我做错了什么,因为我想这没有成功:powershell解析多个关键字并将输出发送到文本文件

(gci -File -Filter FileName | Select-String -SimpleMatch word1, word2,word3) > outputFileName.txt 

其中FileName =文件,outputFileName的名字=从我的搜索三个字生成的文件。谢谢。

+0

[喜欢这个?](http://stackoverflow.com/questions/43450914/how-to-use-findstr-in-powershell-to-find-lines-where -all-words-in-the-search-str/43451196#43451196) –

+0

Hi Mathais R Jessen。你能再次编辑我的代码吗?我不小心改写了你的编辑。谢谢 –

+0

完成。请看上面的链接,除了输出到文件部分(您已经想出)之外,问题实际上是相同的。 –

回答

0

Select-String没有我能想到的任何组合运算符。如果你的话总是按照这个顺序,那么你可以做-Pattern 'word1.*word2.*word3'作为你的匹配,但是如果它们能够以任何顺序变得很快就会变得复杂。相反,我会看看

.. | Select-String 'word1' | Select-String 'word2' | Select-String 'Word3' 

所以,所有的行匹配word1。其中,那些与word2匹配的地方。除了那个更小的结果,那些与word3相匹配的结果。

+0

@ BenQ如果这个答案解决了你的问题,你应该点击左边的复选标记,将它标记为“accepted” –

+0

关于这个主题的最后一个问题,多重'Select-String'可以被重构,比如使用'Select-AllStrings '。试过了,但Powershell关键字不存在。 –

+0

这不正是你原来的问题,我的答案是回答?不,据我所知,除非你可以用正则表达式来编写查询语句,但如果单词顺序可能会变得很困难,并且如果你想使用选择字符串,那么你可以将它们链接在一起......等等。如果你没有选择字符串,那么你可以在每个文件上使用get-content,然后遍历行并测试'($ _ -match'word1') - 和($ _ -match' word2') - 和($ _ -match'word3')''但这是更长,整洁的代码。 – TessellatingHeckler

0

试试这个:

[email protected]("word1", "word2", "word3") 

Get-ChildItem "c:\temp\" -file | %{$currentfile=$_.FullName; Get-Content $_.FullName | 
        %{ 
         $founded=$true 
         foreach ($item in $wordlist) 
         { 
          if (!$_.Contains($item)) 
          { 
           $founded=$false 
           break 
          } 
         } 

         if ($founded) 
         { 
          $currentfile 
         } 


        } 
} 
+0

谢谢@ Esperento57。尽快试用这个 –

+0

请注意,string.Contains()区分大小写,其中select-string不区分大小写。 – TessellatingHeckler

相关问题