由于执行其他操作,我读取了具有get-content -raw 的文件。
$c = get-content myfile.txt -raw
我要用“野兔”替换只包含字符“ *”或“ =”的每一行的全部
我尝试
$c -replace "^[*=]*$","hare"
但是不会成功。它适用于简单的字符串输入,但不适用于包含CRLF的字符串。 (其他不涉及字符类的正则表达式替换操作也可以正常工作。)
测试: 给出了两行的输入文件
*=**
keep this line ***
***=
输出应为
hare
keep this line ***
hare
尝试了很多事情,没有运气。
答案 0 :(得分:1)
您应该使用(?m)
(RegexOptions.Multiline
)选项使^
与行的开头和$
的行末尾匹配。
但是,有一个警告:带有多行选项的.NET正则表达式中的$
锚仅在换行符LF,"`n"
char之前匹配。您需要确保$
之前有一个可选的CR符号(或者如果始终在其中,则是必须的)CR符号。
您可以使用
$file -replace "(?m)^[*=]*\r?$", "hare"
Powershell测试演示:
PS> $file = "*=**`r`nkeep this line ***`r`n***=`r`n***==Keep this line as is"
PS> $file -replace "(?m)^[*=]*\r?$", "hare"
hare
keep this line ***
hare
***==Keep this line as is
答案 1 :(得分:-1)
尝试一下:
$c = get-content "myfile.txt" -raw
$c -split [environment]::NewLine | % { if( $_ -match "^[*= ]+$" ) { "hare" } else { $_ } }