Powershell中的文本搜索问题

时间:2018-02-21 02:43:45

标签: powershell

我一直在使用Powershell成功搜索.txt文件中的各种字符串,但是遇到了困境。我想在.txt文件中搜索是否存在三个不同的字符串。

我正在寻找的三个相似的字符串如下。

“选项I” “选项II” “备选方案III”

该文件可以包含这些字符串的任意组合。也就是说,该文件可能包含所有三个文本字符串或三个中的两个等...

我遇到的问题是在搜索“选项I”字符串时,它会在“选项II”和“选项III”中找到子字符串,或者搜索“选项II”,它会在“选项III”字符串。

这些字符串碰巧都以CR / LF结束,但看起来CR / LF在搜索发生之前就被剥离了。我试图在没有运气的情况下搜索Option I`r`n

我一直在使用

Select-String -Pattern "Option I"

2 个答案:

答案 0 :(得分:0)

表明"我"应该是结束,使用" \ W"和" $"对于行尾:

Select-String -Pattern "Option I(\W|$)"

这也可能让你感兴趣:

Select-String -Pattern "Option I{1,3}(\W|$)"

一次击中3只苍蝇

使用此文件test.txt:

There is no Option 1 here on this line
There is an Option I here on this line
There is an Option II here on this line
There is at the end of this line, an Option I
Are you looking for an Option III on this line?
There is an Option IV here on this line 
执行

Select-String -Pattern "Option I{1,3}(\W|$)"  test.txt

给出:

test.txt:2:There is an Option I here on this line
test.txt:3:There is an Option II here on this line
test.txt:4:There is at the end of this line, an Option I
test.txt:5:Are you looking for an Option III on this line?

答案 1 :(得分:0)

  

这些字符串碰巧都以CR / LF结束,但似乎在搜索发生之前CR / LF被剥离了。

Select-String逐行搜索给定输入文件的行,每行确实有其尾随换行符(CRLF)剥离

因此,不要尝试匹配CRLF(不存在),而是使用正则表达式锚$匹配输入端。 e.g:

# Create sample input file.
@'
Option I
Option II
Option III
'@ > tmp.txt

# Search the file for 'Option I' at the end of each line.
Select-String 'Option I$' tmp.txt

以上产量:

       
tmp.txt:1:Option I
 

也就是说,由于将搜索正则表达式锚定在该行的末尾($),只有以Option I结尾的行匹配。

如果您还希望匹配不仅在行尾的事件,而且您想确保这些匹配发生在字边界,请使用\b

Select-String 'Option I\b' tmp.txt

使用'\bOption I\b'还可以确保搜索字符串的开头出现在单词边界。

另请注意,默认情况下Select-String为case-不敏感;使用-CaseSensitive来改变它。