匹配后替换文本

Ran*_*han 2 grep sed awk

aaaaaaaaa   
bbbbbbbbb   
-th ccccccccc_RD \  

DDDDDDDD  
FFFFFFFF  
-th GGGGGGG_RD \
Run Code Online (Sandbox Code Playgroud)

使用 sed/grep/awk 等,在上面的文本中,如果一行以 "RD \" 结尾,请将行首的 "-th" 替换为 "-to"。期望的输出:

aaaaaaaaa   
bbbbbbbbb   
-to ccccccccc_RD \  

DDDDDDDD  
FFFFFFFF  
-to GGGGGGG_RD \
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏。

ter*_*don 6

这应该有效:

sed 's/^-th\(.*RD \\\)/-to\1/' foo.txt
Run Code Online (Sandbox Code Playgroud)

这有点复杂,因为它\是一个特殊字符,需要转义。由于转义是\自己完成的,匹配文字的方式\\\. 的\(\)在那里捕获匹配的模式,然后将其称为\1在置换。

Perl 中的语法更简单,因为不需要对括号进行转义:

perl -pne 's/^-th(.*RD \\)/-to$1/' foo.txt
Run Code Online (Sandbox Code Playgroud)

在 awk 你会这样做:

awk '/RD \\$/{$1="-to"}{print}' foo.txt 
Run Code Online (Sandbox Code Playgroud)