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/'
searchpuò contenere \ns per rappresentare newline
sedmultiliner.
-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