Grep: cerca e sostituisci la linea completa


13

Il comando

 grep "foo" myfile.txt

stampa tutte le righe corrispondenti nel mio file.

Ora voglio sostituire l' intera riga con un'altra stringa. Come posso fare ciò?

Risposte:


13

Se stai abbinando una sottostringa dell'intera linea, puoi usare il scomando sed con un regex per pulire il resto della linea:

sed -i 's/^.*foo.*$/another string/' myfile.txt

o usa il ccomando per sostituire la linea abbinata in una volta sola:

sed -i '/foo/ { c \
another string
}' myfile.txt

Se non si desidera digitare comandi multilinea al prompt, è possibile inserirlo in uno script:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt

Grazie! quando uso la seconda opzione ottengo: sed: -e espressione # 1, carattere 0: senza pari `{'
morsetto

alla fine della prima riga, è necessario digitare \ e quindi premere Return - è importante che \ sfugga alla prima riga. Quindi, assicurati che }'sia su una linea separata da another string: la sostituzione è tutto su quella seconda linea, incluso il }se lo metti lì.
Inutile

-1

È possibile utilizzare la funzionalità inplace di sed :

sed -i -e 's/foo/bar/' myfile.txt

Questo sostituirà solo foocon barnon l'intera linea ..
Jahid
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.