2013-05-08 10 views

risposta

40

Si può fare con uno di questi:

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

Prende la linea completa che contiene six e lo sostituisce con fault.

Esempio:

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

Si basa su this solution per Replace whole line containing a string using Sed

Più in generale, è possibile usare un'espressione sed '/match/s/.*/replacement/' file. Questo eseguirà l'espressione sed 's/match/replacement/' in quelle linee contenenti match. Nel tuo caso questo sarebbe:

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

Che cosa succede se abbiamo 'uno due sei otto 1103 quattro' e vogliamo includere 'otto' e 'undici' come il nostro "cattivo" parole?

In questo caso possiamo usare il -e per molteplici condizioni:

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

e così via.

O anche:

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

E se abbiamo "uno due sei otto undici tre quattro" e vogliamo includere "otto" e "undici" come parole "cattive"? Will s /.* six | eight | undici. */Fault/g funziona? – irek

+0

È possibile con '-e', vedere la mia risposta aggiornata. – fedorqui

+0

Grazie per il tuo tempo! – irek

3

Questo potrebbe funzionare per voi (GNU SED):

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

o:

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

Sopra risposte ha funzionato bene per me, solo menzionare un alternate way

M ATCH singolo modello e sostituirlo con uno nuovo:

sed -i '/six/c fault' file 

Partita modello multipla e sostituire con uno nuovo (comandi concatenare):

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