【发布时间】:2019-02-28 18:24:43
【问题描述】:
我有一个包含两个字符串之一的文件列表:
“stuff”或“;stuff”
我正在尝试编写一个仅返回包含“stuff”的文件的 PowerShell 脚本。下面的脚本当前返回所有文件,因为显然“stuff”是“;stuff”的子字符串
对于我的生活,我无法弄清楚如何只匹配包含“stuff”的文件,而没有前面的;
Get-Content "C:\temp\list\list.txt" |
Where-Object { Select-String -Quiet -Pattern "stuff" -SimpleMatch $_ }
注意:C:\temp\list\list.txt 包含一个文件路径列表,每个路径都传递给Select-String。
感谢您的帮助。
【问题讨论】:
-
正则表达式怎么样?
Select-String -Pattern '[^;]stuff' -
如果您的目标是选择字面上为
stuff而不是;stuff的模式,您可以使用否定集(不要使用-SimpleMatch):-Pattern '[^;]stuff' -
使用
[^;]stuff产生零结果,我不确定为什么这样做有意义。在玩了^stuff之后确实产生了我正在寻找的结果,但我仍然不知道为什么一个工作与另一个工作。 -
另一种选择是
[^;]?,但消极的后视是工作的正确工具。 -
@TheIncorrigible1:
[^;]?stuff也很诱人,但也不起作用:';stuff' -match '[^;]?stuff'->$true
标签: regex powershell regex-negation regex-lookarounds select-string