65

sedパターンに一致する場合は、行全体を置き換える必要があります。たとえば、行が 'one two six three four' で、'six' がある場合、行全体を 'fault' に置き換える必要があります。

4

4 に答える 4

98

次のいずれかで実行できます。

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。これにより、sed 's/match/replacement/'を含む行の式が実行されmatchます。あなたの場合、これは次のようになります。

sed '/six/s/.*/fault/' file

「ワン ツー シックス エイト イレブン スリー フォー」があり、「エイト」と「イレブン」を「悪い」単語として含めたい場合はどうなるでしょうか。

この場合-e、複数の条件に を使用できます。

sed -e 's/.*six.*/fault/' -e 's/.*eight.*/fault/' file

等々。

またはまた:

sed '/eight/s/.*/XXXXX/; /eleven/s/.*/XXXX/' file
于 2013-05-08T12:15:46.240 に答える
3

これはうまくいくかもしれません(GNU sed):

sed -e '/six/{c\fault' -e ';d}' file

また:

sed '/six/{c\fault'$'\n'';d}' file
于 2013-05-08T14:05:49.040 に答える