Mam polecenie zamiany sed, które chciałbym być kompatybilne zarówno z BSD, sedjak i GNU sed. Rozszerzone wyrażenia regularne nie stanowią problemu, ponieważ nie potrzebuję ich w tym przypadku. Moim głównym problemem jest różnica w sposobie, w jaki oba sedinterpretują sekwencje specjalne znaków w ciągach zastępujących . Mój ciąg zastępujący zawiera tabulatory i znaki nowej linii i chciałbym, aby były one widoczne w ciągach poleceń dla ułatwienia konserwacji, jednak BSD sednie interpretuje sekwencji specjalnych i GNU sed tak . Jaki jest właściwy sposób instruowania, sedaby interpretować te sekwencje specjalne w BSD? Następujące dwa fragmenty są uosobieniem mojego problemu:
GNU ANTYLOPA sed
echo ABC | sed 's/B/\n\tB\n'
yeilds
A
B
C
BSD sed
echo ABC | sed 's/B\n\tB\n'
daje
AntBnC
Oczywiście, \ni \tnie są interpretowane przez BSD jako sekwencje specjalnesed
A teraz moje pytanie. Według strony BSD sed:
Aby określić znak nowego wiersza w ciągu zastępującym, poprzedź go odwrotnym ukośnikiem.
Czy to oznacza, że musiałbym poprzedzić dosłowny znak nowej linii odwrotnym ukośnikiem? Jaki jest właściwy sposób instruowania, sedaby interpretować sekwencje specjalne jak \nw tekście zastępczym?
sed. W końcu prawdopodobnie będzie sensowne użycie awk. Co sądzisz o interpretacji cytowanej przeze mnie strony podręcznika BSD?