我一直在使用Powershell成功搜索.txt文件中的各种字符串,但是遇到了困境。我想在.txt文件中搜索是否存在三个不同的字符串。
我正在寻找的三个相似的字符串如下。
“选项I” “选项II” “备选方案III”
该文件可以包含这些字符串的任意组合。也就是说,该文件可能包含所有三个文本字符串或三个中的两个等...
我遇到的问题是在搜索“选项I”字符串时,它会在“选项II”和“选项III”中找到子字符串,或者搜索“选项II”,它会在“选项III”字符串。
这些字符串碰巧都以CR / LF结束,但看起来CR / LF在搜索发生之前就被剥离了。我试图在没有运气的情况下搜索Option I`r`n
。
我一直在使用
Select-String -Pattern "Option I"
答案 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
来改变它。