我曾经遇到过其他类似的问题,并尝试过他们的建议,但这无济于事。我正在尝试删除文本文件中的特定文本行。
我的代码有效
(Get-Content -Path "MyPath.txt" -Raw).Replace('this is the line', '') | Set-Content "MyPath.txt" -Encoding UTF8
现在可以使用,但是在文本文件中留下了一个难看的空行。我还想通过在行尾添加此正则表达式来替换可选的换行符
\n?
这是行不通的。其他线程提出了其他建议,我尝试了所有组合,但无法匹配。我正在使用Windows样式结尾(CRLF)
都使用-Raw而不使用它
我什至没有在末尾添加正则表达式问号(或非捕获组,以防它需要\ r \ n语法)。
该[string]
类型的.Replace()
方法不支持正则表达式(正则表达式),而PowerShell的-replace
操作一样。
但是,在这种情况下,最简单的解决方案是利用以下事实:-ne
运算符充当具有数组值的LHS的过滤器(就像其他比较运算符一样):
@(Get-Content -Path MyPath.txt) -ne 'this is the line' |
Set-Content MyPath.txt -Encoding UTF8
注意如何Get-Content
被调用,而不 -Raw
以返回一个阵列的行,从该-ne
然后过滤掉的(非)-interest行; @(...)
中,阵列子表达式运算符确保输出是即使文件恰好包含只是阵列一个线。
假设字符串'this is the line'
与整行匹配(不区分大小写)。如果不是这种情况,则-ne
可以使用-notlike
通配符表达式或-notmatch
正则表达式(例如
-notmatch 'this is the line'
或-notlike '*this is the line'
)来代替
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句