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.
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.
Risposte:
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/'
search
può contenere \n
s per rappresentare newline
sed
multiliner.
-0
imposta il separatore dei record su null, quindi l'intero file verrà letto contemporaneamente anziché riga per riga. -p
fa stampare il risultato dopo la sostituzione. -e
ha preso l'argomento successivo come espressione da eseguire, ed s/search/replace/
è quell'espressione