J'ai une commande de remplacement sed que je voudrais être compatible avec BSD sedainsi que GNU sed. Les expressions régulières étendues ne sont pas un problème car je n'en ai pas besoin dans ce cas. Mon problème principal est la différence dans la façon dont les deux sedinterprètent les séquences d'échappement de caractères dans les chaînes de remplacement . Ma chaîne de remplacement contient des onglets et des sauts de ligne et j'aimerais qu'ils soient visibles dans les chaînes de commande pour faciliter la maintenance, cependant, BSD sedn'interprète pas les séquences d'échappement et GNU le sed fait . Quelle est la manière appropriée d'instruire sedpour interpréter ces séquences d'échappement sur BSD? Les deux extraits suivants résument mon problème:
GNOU sed
echo ABC | sed 's/B/\n\tB\n'
yeilds
A
B
C
BSD sed
echo ABC | sed 's/B\n\tB\n'
les rendements
AntBnC
De toute évidence, \net \tne sont pas interprétés comme des séquences d'échappement par BSDsed
Maintenant, à ma question. Selon la sedpage de manuel BSD :
Pour spécifier un caractère de nouvelle ligne dans la chaîne de remplacement, faites-le précéder d'une barre oblique inverse.
Cela implique-t-il que je devrais précéder une nouvelle ligne littérale d'une barre oblique inverse? Quelle est la manière appropriée d'instruire sedpour interpréter les séquences d'échappement comme \ndans le texte de remplacement?
sed. En fin de compte, il sera probablement judicieux d'utiliser awk. Alors, que pensez-vous de l'interprétation de la page de manuel BSD sed que j'ai citée?