Ответ 1
Вы можете сделать это с помощью любого из них:
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