パターンに一致する場合は、行全体をsed
に置き換える必要があります。たとえば、行が「1 2 6 3 4」であり、「6」がある場合、行全体を「fault」に置き換える必要があります。
次のいずれかでそれを行うことができます。
sed 's/.*six.*/fault/' file # check all lines
sed '/six/s/.*/fault/' file # matched lines -> then remove
six
を含む行全体を取得し、fault
に置き換えます。
例:
$ cat file
six
asdf
one two six
one isix
boo
$ sed 's/.*six.*/fault/' file
fault
asdf
fault
fault
boo
このソリューション から Sedを使用して文字列を含む行全体を置換 に基づいています
より一般的には、式sed '/match/s/.*/replacement/' file
を使用できます。これは、match
を含む行でsed 's/match/replacement/'
式を実行します。あなたの場合、これは次のようになります:
sed '/six/s/.*/fault/' file
「1つ2つ6つ8つ11つ3つ4つ」があり、「悪い」単語として「8」と「11」を含めたい場合はどうでしょうか。
この場合、複数の条件に-e
を使用できます。
sed -e 's/.*six.*/fault/' -e 's/.*eight.*/fault/' file
等々。
または:
sed '/eight/s/.*/XXXXX/; /eleven/s/.*/XXXX/' file
上記の答えは私にとってはうまくいきましたが、別の方法を言及しただけです
単一のパターンに一致し、新しいパターンに置き換えます。
sed -i '/six/c fault' file
複数のパターンに一致し、新しいパターンに置き換えます(コマンドを連結する):
sed -i -e '/one/c fault' -e '/six/c fault' file
これはあなたのために働くかもしれません(GNU sed):
sed -e '/six/{c\fault' -e ';d}' file
または:
sed '/six/{c\fault'$'\n'';d}' file