J'ai une commande de remplacement sed que je voudrais être compatible avec BSD sed
ainsi 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 sed
interprè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 sed
n'interprète pas les séquences d'échappement et GNU le sed
fait . Quelle est la manière appropriée d'instruire sed
pour 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, \n
et \t
ne sont pas interprétés comme des séquences d'échappement par BSDsed
Maintenant, à ma question. Selon la sed
page 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 sed
pour interpréter les séquences d'échappement comme \n
dans 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?