2012-02-27 14 views

risposta

3

È resta che fuggire con un carattere rovesciato e premere il tasto Invio mentre si scrive:

$ sed 's/),(/),\ 
(/g' temp.txt 
(foo), 
(bar) 
(foobar), 
(foofoobar) 
+0

Questo non funziona se si mette il comando sed in un file bash. Solo se si mette '\\' prima del carattere della nuova riga, inizia a funzionare. Ma mi chiedo perché? – qazwsx

+0

@ user001 Per quello che vale, lo stesso identico comando ha funzionato per me in Bash 4.2.10 in Ubuntu 11.10. – jcollado

6

sed non supporta la sequenza \n escape nella fornitura sostitutiva Comando zione, tuttavia, supporta un vero e proprio carattere di nuova riga se si fuga (perché sed comandi devono utilizzare solo una singola linea, e la fuga è qui per dirvi sed che si vuole veramente un carattere di nuova riga):

$ sed 's/),(/),\\ 
(/g' temp.txt 
(foo), 
(bar) 
(foobar), 
(foofoobar) 

È anche possibile utilizzare una variabile di shell per memorizzare il carattere di nuova riga.

$ NL=' 
' 
$ sed "s/),(/,\\$NL(/g" temp.txt 
(foo), 
(bar) 
(foobar), 
(foofoobar) 

provata su Mac OS X Lion, utilizzando bash come shell.

+0

Nel primo approccio, perché deve essere '\\' ma non '\'? – qazwsx

+0

Il comando che si passa a 'sed' non dovrebbe contenere newline. Quindi, se vuoi passare una newline, devi scappare con una barra rovesciata in modo che 'sed' sappia che hai fatto apposta. E hai bisogno di un secondo backslash per proteggere il primo da essere interpretato dalla shell (usare il backslash per sfuggire al carattere in regexp era IMHO una cattiva idea dato che generalmente è anche usato per citare il carattere in stringa, e quindi di solito devi usare il doppio backslash in regexp). –

Problemi correlati