Tengo un comando de reemplazo de sed que me gustaría ser compatible con BSD sedy 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 seds 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 sedno interpreta las secuencias de escape y GNU sed sí . ¿Cuál es la forma adecuada de instruir sedpara 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, \ny \tno son interpretados como secuencias de escape por BSDsed
Ahora, a mi pregunta. Según la página de sedmanual 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 sedpara interpretar secuencias de escape como \nen 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é?