Ich habe einen sed-Ersatzbefehl, der sowohl mit BSD sed
als auch mit GNU kompatibel sein soll sed
. Erweiterte reguläre Ausdrücke sind kein Problem, da ich sie in diesem Fall nicht benötige. Mein Hauptproblem ist der Unterschied in der Art und Weise, wie die beiden sed
Zeichen-Escape-Sequenzen in den Ersetzungszeichenfolgen interpretieren . Meine Ersetzungszeichenfolge enthält Tabulatoren und Zeilenumbrüche, und ich möchte, dass sie zur Vereinfachung der Wartung in den Befehlszeichenfolgen angezeigt werden. BSD sed
interpretiert die Escape-Sequenzen jedoch nicht und GNU sed
tut dies . Was ist der geeignete Weg, sed
um diese Escape-Sequenzen auf BSD zu interpretieren? Die folgenden zwei Ausschnitte stehen für mein Problem:
GNU sed
echo ABC | sed 's/B/\n\tB\n'
yeilds
A
B
C
BSD sed
echo ABC | sed 's/B\n\tB\n'
Ausbeuten
AntBnC
Offensichtlich \n
und \t
sind nicht als Escape - Sequenzen von BSD interpretiertsed
Nun zu meiner Frage. Laut der BSD- sed
Manpage:
Um ein Newline-Zeichen in der Ersetzungszeichenfolge anzugeben, müssen Sie diesem einen Backslash voranstellen.
Bedeutet dies, dass ich einem wörtlichen Zeilenumbruch einen Backslash voranstellen muss? Wie kann man anweisen sed
, Escape-Sequenzen wie \n
im Ersetzungstext zu interpretieren ?
sed
. Am Ende wird es wahrscheinlich Sinn machen, awk zu verwenden. Was halten Sie von der Interpretation der von mir zitierten BSD sed-Manpage?