Sostituzione di più righe in sed o awk [chiuso]


9

Sto cercando di usare sed o awk per sostituire 5 righe in un file smb ma non ho idea di come gestire le nuove righe.


6
Certo, sed e awk possono farlo, ma ho qualche problema a capire esattamente quale sia la tua domanda. Cosa ti sta causando esattamente problemi? Inserire nuove righe? Sostituirli?
frabjous,

Risposte:


19

Sed è piuttosto cattivo in questo, perché opera una riga alla volta. L'unica tecnica decente che io abbia mai visto fare questo è questa , che prevede la memorizzazione dell'intero file nel buffer di attesa di sed e quindi operare su tutto in una volta:

sed -n '1h;1!H;${g;s/search/replace/;p;}'

Se puoi, è molto più facile usare perl per ottenere questo risultato:

perl -0pe 's/search/replace/'

searchpuò contenere \ns per rappresentare newline


1
+1 per il sedmultiliner.
Lazer,

Puoi spiegare cosa fa la riga di comando per perl?
Michael

1
@Michael -0imposta il separatore dei record su null, quindi l'intero file verrà letto contemporaneamente anziché riga per riga. -pfa stampare il risultato dopo la sostituzione. -eha preso l'argomento successivo come espressione da eseguire, ed s/search/replace/è quell'espressione
Michael Mrozek
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.