2013-05-08 12 views

Odpowiedz

40

Można to zrobić z jednej z nich:

sed 's/.*six.*/fault/' file  # check all lines 
sed '/six/s/.*/fault/' file  # matched lines -> then remove 

Robi się cały wiersz zawierający six i zastępuje go fault.

Przykład:

$ cat file 
six 
asdf 
one two six 
one isix 
boo 
$ sed 's/.*six.*/fault/' file 
fault 
asdf 
fault 
fault 
boo 

Jest on oparty na this solution do Replace whole line containing a string using Sed

Bardziej ogólnie, można użyć wyrażenia sed '/match/s/.*/replacement/' file. Spowoduje to wykonanie wyrażenia sed 's/match/replacement/' w wierszach zawierających match. W twoim przypadku będzie to:

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

Co jeśli mamy „jeden dwa sześć osiem jedenaście trzy cztery” i chcemy zawierać „osiem” i „jedenaście” jako nasz „zły” słowa?

W tym przypadku możemy użyć -e dla wielu warunków:

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

i tak dalej.

Albo też:

sed '/eight/s/.*/XXXXX/; /eleven/s/.*/XXXX/' file 
+0

Co, jeśli mamy "jeden dwa sześć osiem jedenaście trzy cztery" i chcemy włączyć "osiem" i "jedenaście" jako nasze "złe" słowa? Czy s /.* sześć | osiem | jedenaście. */Usterka/g działa? – irek

+0

Jest to możliwe z '-e', zobacz moją zaktualizowaną odpowiedź. – fedorqui

+0

Dziękuję za poświęcony czas! – irek

3

To może pracować dla Ciebie (GNU sed):

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

czyli

sed '/six/{c\fault'$'\n'';d}' file 
2

Nad odpowiedziami działało w porządku dla mnie, po prostu wspomnieć alternatywny sposób:

M Atch pojedynczy wzorzec i zastąpić nowym:

sed -i '/six/c fault' file 

meczów wielokrotnego wzór i wymienić na nowy (polecenia złączenie):

sed -i -e '/one/c fault' -e '/six/c fault' file