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 :
- crea un'etichetta tramite
:a
- aggiungi la riga corrente e successiva allo spazio del modello tramite
N
- 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)). - alla fine la sostituzione sostituisce ogni nuova riga con una virgola nello spazio del pattern (che è l'intero file).