change bash unix sed escaping solaris

bash - change - nuevas líneas de escape en cadena de reemplazo sed



replace line sed (5)

Aquí están mis intentos de reemplazar un carácter b con una nueva línea usando sed mientras se ejecuta bash

$> echo ''abc'' | sed ''s/b//n/'' anc

No eso no es

$> echo ''abc'' | sed ''s/b///n/'' a/nc

No, tampoco es eso. La salida que quiero es

a c

¡AYUDA!


En un archivo multilínea tuve que canalizar tr en ambos lados de sed, así:

echo "$FILE_CONTENTS" | / tr ''/n'' ¥ | tr '' '' ∑ | mySedFunction $1 | tr ¥ ''/n'' | tr ∑ '' ''

Ver a Unix le gusta quitar nuevas líneas y espacios iniciales adicionales y todo tipo de cosas, porque creo que parecía ser lo que había que hacer en el momento en que se creó en el siglo XX. De todos modos, este método que muestro arriba resuelve el problema al 100%. Ojalá hubiera visto a alguien publicar esto en alguna parte porque me habría salvado unas tres horas de mi vida.


No dijiste que querías reemplazar globalmente todos los b . Si es así, quieres tr lugar:

$ echo abcbd | tr b $''/n'' a c d

Funciona para mí en Solaris 5.8 y bash 2.03


Parece que estás en BSD o Solaris. Prueba esto:

[jaypal:~/Temp] echo ''abc'' | sed ''s/b// > /'' a c

Agrega una barra negra y pulsa enter y completa tu declaración sed .


$ echo ''abc'' | sed ''s/b//'$''/n''''/'' a c

En Bash, $''/n'' expande a un solo carácter de nueva línea entre comillas (consulte la sección "COTIZACIÓN" de man bash ). Las tres cadenas se concatenan antes de pasarlas a sed como argumento. Sed requiere que se escape el carácter de nueva línea, de ahí la primera barra invertida en el código que pegué.


echo ''abc'' | sed ''s/b//'/n''/''

te falta '''' alrededor de /n