Eu tenho um comando de substituição sed que gostaria de ser compatível com o BSD sed
e o GNU sed
. Expressões regulares estendidas não são um problema, pois não preciso delas neste caso. Meu principal problema é a diferença na maneira como os dois sed
interpretam as seqüências de escape de caracteres nas seqüências de caracteres de substituição . Meu cadeia de substituição contém guias e novas linhas e eu gostaria que eles sejam visíveis nas cadeias de comando para facilitar a manutenção, no entanto, BSD sed
não interpreta as seqüências de escape e GNU sed
faz . Qual é a maneira apropriada de instruir sed
para interpretar essas seqüências de escape no BSD? Os dois trechos a seguir resumem meu problema:
GNU sed
echo ABC | sed 's/B/\n\tB\n'
yeilds
A
B
C
BSD sed
echo ABC | sed 's/B\n\tB\n'
rendimentos
AntBnC
Claramente, \n
e \t
não são interpretados como seqüências de escape pelo BSDsed
Agora, a minha pergunta. De acordo com a página de sed
manual do BSD :
Para especificar um caractere de nova linha na sequência de substituição, preceda-o com uma barra invertida.
Isso implica que eu precisaria preceder uma nova linha literal por uma barra invertida? Qual é a maneira apropriada de instruir sed
para interpretar seqüências de escape como \n
no texto de substituição?
sed
. No final, provavelmente fará sentido usar o awk. Então, o que você acha da interpretação da página de manual do BSD sed que citei?