我正在尝试使用下面的PowerShell代码从包含部分字符串的文本文件中删除所有行:
Get-Content C:\new\temp_*.txt | Select-String -pattern "H|159" -notmatch | Out-File C:\new\newfile.txt
实际的字符串是H|159|28-05-2005|508|xxx
,它在文件中重复了多次,并且我尝试只匹配上面指定的第一部分。对吗?目前我的输出为空。
我错过什么了吗?
我正在尝试使用下面的PowerShell代码从包含部分字符串的文本文件中删除所有行:
Get-Content C:\new\temp_*.txt | Select-String -pattern "H|159" -notmatch | Out-File C:\new\newfile.txt
实际的字符串是H|159|28-05-2005|508|xxx
,它在文件中重复了多次,并且我尝试只匹配上面指定的第一部分。对吗?目前我的输出为空。
我错过什么了吗?
7条答案
按热度按时间anauzrmj1#
假设你想把它写在同一个文件中,你可以做如下:
bvpmtnay2#
逃离|使用反勾号的字符
u0njafvf3#
在这种情况下,不需要
Select-String
,只需使用Where-Object
过滤掉这些行即可String.Contains
执行字符串比较而不是正则表达式比较,因此不需要转义管道字符,而且速度也更快n3h0vuf24#
管道字符
|
在正则表达式中有特殊的含义。a|b
表示“匹配a
或b
“。如果要匹配文本|
字符,则需要对其进行转义:o2g1uqev5#
另一个写入相同文件的选项,基于现有答案。只需添加括号以在内容发送到文件之前完成操作。
1tuwyuhd6#
这可能是一个很长的路要走围绕一个简单的问题,它确实允许我删除行包含大量的匹配。我没有一个部分匹配,可以使用,并需要它被做超过1000个文件。这篇文章确实帮助我到达我需要的地方,谢谢。
6ju8rftf7#
如果你有任何人有这个问题,而做什么建议的
Robert Brooker
-*These files have different encodings. Left file: Unicode (UTF-8) with signature. Right file: Unicode (UTF-8) without signature. You can resolve the difference by saving the right file with the encoding Unicode (UTF-8) with signature.*
与Set-Content
使用
-Encoding UTF8
就像这样