匹配后替换文本

匹配后替换文本
aaaaaaaaa   
bbbbbbbbb   
-th ccccccccc_RD \  

DDDDDDDD  
FFFFFFFF  
-th GGGGGGG_RD \

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

aaaaaaaaa   
bbbbbbbbb   
-to ccccccccc_RD \  

DDDDDDDD  
FFFFFFFF  
-to GGGGGGG_RD \

任何帮助是极大的赞赏。

答案1

这应该有效:

sed 's/^-th\(.*RD \\\)/-to\1/' foo.txt

这有点复杂,因为\它是一个特殊字符,需要逃脱了。由于转义是自己完成的\,因此匹配文字的方式\\\。和用于捕获匹配的模式,然后在替换中引用\(该模式。\)\1

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

perl -pne 's/^-th(.*RD \\)/-to$1/' foo.txt

在 awk 中你会这样做:

awk '/RD \\$/{$1="-to"}{print}' foo.txt 

相关内容