一致後のテキストの置換

一致後のテキストの置換
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 

関連情報