Sostituzione della stringa in base al numero di riga


50

Ho una situazione in cui voglio sostituire una particolare stringa in molti file

Sostituisci una stringa AAA con un'altra stringa BBB ma ci sono molte stringhe che iniziano con AAA o terminano in AAA e voglio sostituirne solo una sulla linea 34 e mantenerne intatte le altre.

È possibile specificare per numero di riga, su tutti i file questa stringa è esattamente sulla 34a riga.

Risposte:


82

È possibile specificare il numero di riga in sed o NR (numero di record) in awk.

awk 'NR==34 { sub("AAA", "BBB") }'

oppure utilizzare FNR (record del numero di file) se si desidera specificare più di un file sulla riga di comando.

awk 'FNR==34 { sub("AAA", "BBB") }'

o

sed '34s/AAA/BBB/'

fare una sostituzione sul posto con sed

sed -i '34s/AAA/BBB/' file_name

-3

supponiamo che tu voglia sostituire la terza riga in file_record:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record

usa la citazione indietro prima della testa e dopo -1 ... qui non la prende
RAMAN

1
Questo non funzionerà. Ha bisogno di qualche evasione pesante. E se la terza riga fosse duplicata altrove?
Sparhawk,
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.