Tengo un comando de reemplazo de sed que me gustaría ser compatible con BSD sed
y GNU sed
. Las expresiones regulares extendidas no son un problema, ya que no las necesito en este caso. Mi problema principal es la diferencia en la forma en que los dos sed
s interpretan las secuencias de escape de caracteres en las cadenas de reemplazo . Mi cadena de reemplazo contiene pestañas y nuevas líneas y me gustaría que fueran visibles en las cadenas de comandos para facilitar el mantenimiento, sin embargo, BSD sed
no interpreta las secuencias de escape y GNU sed
sí . ¿Cuál es la forma adecuada de instruir sed
para interpretar estas secuencias de escape en BSD? Los siguientes dos fragmentos resumen mi problema:
ÑU sed
echo ABC | sed 's/B/\n\tB\n'
Yeilds
A
B
C
BSD sed
echo ABC | sed 's/B\n\tB\n'
rendimientos
AntBnC
Claramente, \n
y \t
no son interpretados como secuencias de escape por BSDsed
Ahora, a mi pregunta. Según la página de sed
manual de BSD :
Para especificar un carácter de nueva línea en la cadena de reemplazo, preceda con una barra diagonal inversa.
¿Esto implica que tendría que preceder una nueva línea literal por una barra diagonal inversa? ¿Cuál es la forma apropiada de instruir sed
para interpretar secuencias de escape como \n
en el texto de reemplazo?
sed
. Al final, probablemente tenga sentido usar awk. Entonces, ¿qué piensa sobre la interpretación de la página de manual de BSD sed que cité?