Powershell正则表达式替换行仅包含某些字符

时间:2019-02-28 05:16:21

标签: regex powershell

由于执行其他操作,我读取了具有get-content -raw 的文件。

$c = get-content myfile.txt -raw

我要用“野兔”替换只包含字符“ *”或“ =”的每一行的全部

我尝试

$c -replace "^[*=]*$","hare"

但是不会成功。它适用于简单的字符串输入,但不适用于包含CRLF的字符串。 (其他不涉及字符类的正则表达式替换操作也可以正常工作。)

测试: 给出了两行的输入文件

*=** 
keep this line ***
***=

输出应为

hare
keep this line ***
hare

尝试了很多事情,没有运气。

2 个答案:

答案 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 { $_ } }