ich auf einem seltsam bisschen Verhalten auf BSD von Mac OS X. sed ausgeführt habeOdd sed Verhalten beim Start der Linie ersetzt
sed -e '{s/^/ /;s/\(a*\)/\1b/;}'
Also das im Grunde fügt nur ein paar Räume zu Beginn der Linie, dann ersetzen Sie eine beliebige Anzahl von aufeinanderfolgenden 'a' mit der gleichen Sache, gefolgt von einem b.
Erwartet:
|Input |Output
|a | ab
|aa | aab
|aaa | aaab
Aktuell:
|Input |Output
|a |b a
|aa |b aa
|aaa |b aaa
die Reihenfolge dieser beiden Befehle führt zu dem erwarteten Ergebnis umzukehren. Mein Verständnis der Sache, die getan wird, ist eine Zeile wird in den Musterraum gelesen, dann werden alle Ausdrücke der Reihe nach angewendet, dann wird die nächste Zeile in den Musterraum eingelesen und der Prozess wird wiederholt. Es scheint eine gewisse
ich auch
sed -e '{s/^/ /;s/\(a+\)/\1b/;}'
versucht haben zu sein, die nichts tut, um alle außer die Räume hinzufügen.
Meine Frage ist, warum ersetzt der Anfang der Zeile mit diesem Effekt?
Ihre zweite Regex paßt immer am Anfang des Strings. Die erste Substitution ändert das nicht. – melpomene