Mam polecenie zamiany sed, które chciałbym być kompatybilne zarówno z BSD, sed
jak 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 sed
interpretują 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 sed
nie interpretuje sekwencji specjalnych i GNU sed
tak . Jaki jest właściwy sposób instruowania, sed
aby 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, \n
i \t
nie 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, sed
aby interpretować sekwencje specjalne jak \n
w 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?