Ho un comando di sostituzione sed che vorrei essere compatibile con BSD sed
e GNU sed
. Le espressioni regolari estese non sono un problema in quanto non ne ho bisogno in questo caso. Il mio problema principale è la differenza nel modo in cui i due sed
interpretano le sequenze di escape dei caratteri nelle stringhe di sostituzione . La mia stringa di sostituzione contiene tab e newline e vorrei che fossero visibili nelle stringhe di comando per facilità di manutenzione, tuttavia BSD sed
non interpreta le sequenze di escape e GNU lo sed
fa . Qual è il modo appropriato per istruire sed
a interpretare queste sequenze di escape su BSD? I seguenti due frammenti rappresentano il mio 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'
i rendimenti
AntBnC
Chiaramente, \n
e \t
non sono interpretati come sequenze di escape da BSDsed
Ora, alla mia domanda. Secondo la sed
manpage BSD :
Per specificare un carattere di nuova riga nella stringa di sostituzione, precederlo con una barra rovesciata.
Ciò implica che avrei bisogno di precedere una nuova riga letterale da una barra rovesciata? Qual è il modo appropriato per istruire sed
l'interpretazione delle sequenze di escape come \n
nel testo sostitutivo?
sed
. Alla fine probabilmente avrà senso usare awk. Cosa ne pensi dell'interpretazione della manpage di BSD sed che ho citato?