Ho un comando di sostituzione sed che vorrei essere compatibile con BSD sede 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 sedinterpretano 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 sednon interpreta le sequenze di escape e GNU lo sed fa . Qual è il modo appropriato per istruire seda 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, \ne \tnon sono interpretati come sequenze di escape da BSDsed
Ora, alla mia domanda. Secondo la sedmanpage 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 sedl'interpretazione delle sequenze di escape come \nnel testo sostitutivo?
sed. Alla fine probabilmente avrà senso usare awk. Cosa ne pensi dell'interpretazione della manpage di BSD sed che ho citato?