Ho bisogno di sostituire l'intera linea con sed
se corrisponde a un modello. Ad esempio se la linea è 'uno due sei tre quattro' e se 'sei' c'è, allora l'intera linea deve essere sostituita con 'errore'.sed sostituire l'intera linea quando trovata trovata
risposta
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
Questo potrebbe funzionare per voi (GNU SED):
sed -e '/six/{c\fault' -e ';d}' file
o:
sed '/six/{c\fault'$'\n'';d}' file
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
Avete considerato 'grep -V'? – xato