GNU/Linux >> Linux Esercitazione >  >> Linux

Sed può sostituire i caratteri di nuova riga?

C'è un problema con sed e new line character?
Ho un file test.txt con i seguenti contenuti

aaaaa  
bbbbb  
ccccc  
ddddd  

Quanto segue non funziona:
sed -r -i 's/n/,/g' test.txt

So che posso usare tr per questo ma la mia domanda è perché sembra non possibile con sed.

Se questo è un effetto collaterale dell'elaborazione del file riga per riga, sarei interessato al motivo per cui ciò accade. Penso grep rimuove le nuove righe. Sed fa lo stesso?

Risposta accettata:

Con GNU sed e fornito POSIXLY_CORRECT non è nell'ambiente (per input a riga singola):

sed -i ':a;N;$!ba;s/n/,/g' test.txt

Da https://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n :

  1. crea un'etichetta tramite :a
  2. aggiungi la riga corrente e successiva allo spazio del modello tramite N
  3. se siamo prima dell'ultima riga, diamo all'etichetta creata $!ba ($! significa non farlo sull'ultima riga (in quanto dovrebbe esserci un'ultima nuova riga)).
  4. alla fine la sostituzione sostituisce ogni nuova riga con una virgola nello spazio del pattern (che è l'intero file).

Linux
  1. trova il testo corrispondente e sostituisci la riga successiva

  2. sostituire l'ennesima occorrenza di stringa in ogni riga di un file di testo

  3. sed:come sostituire la riga se trovata o aggiungere alla fine del file se non trovata?

  4. Sostituzione Sed multilinea

  5. Come sostituire in modo ricorsivo i caratteri con sed?

I 20 migliori comandi sed da usare

Come utilizzare Sed per sostituire una stringa multilinea?

Sostituire Intervallo di linee con Intervallo di linee (sed o altro)?

Sed On Osx inserisce a una certa linea?

Tutorial Unix Sed:aggiungi, inserisci, sostituisci e conta righe di file

Sostituzione SED su più righe