2012-02-27 4 views

Respuesta

3

Usted sólo hay que escapar con una barra invertida y pulse la tecla Intro mientras se escribe:

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

Esto no funciona si coloca el comando sed en un archivo bash. Solo si pones '\\' antes del carácter de la nueva línea, comienza a funcionar. Pero me pregunto por qué? – qazwsx

+0

@ user001 Por lo que vale, exactamente el mismo comando me funcionó en la versión 4.2.10 de Ubuntu 11.10. – jcollado

6

sed no es compatible con la secuencia de escape \n en su sustituibilidad comando ción, sin embargo, que es compatible con un carácter de nueva línea real si escapas (porque sed comandos sólo deben usar una sola línea, y el escape está aquí para decirle sed que realmente desea un carácter de nueva línea):

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

También puede usar una variable de shell para almacenar el carácter de nueva línea.

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

probado en Mac OS X Lion, utilizando bash como shell.

+0

En el primer enfoque, ¿por qué tiene que ser '\\' pero no '\'? – qazwsx

+0

El comando que pasa a 'sed' no debe contener newline. Entonces, si quieres pasar una nueva línea, debes escapar con una barra invertida para que 'sed 'sepas que lo hiciste a propósito. Y necesitas una segunda barra invertida para proteger a la primera de ser interpretada por el intérprete de comandos (usar una barra inclinada invertida para escapar del carácter en expresiones regulares era una mala idea en mi humilde opinión, ya que generalmente también se utiliza para citar caracteres en cadenas, y por lo tanto usas doble barra invertida en expresiones regulares). –

Cuestiones relacionadas