Hinzufügen eines Eckfalls für GNU sed hier: sed -E 's,foo,bar,g'macht nicht die globale Sache. Wenn Sie es ändern, sed -E -e 's,foo,bar,g'funktioniert es.
Melvyn Sopacua
23
Sie müssen ein gam Ende setzen, es steht für "global":
sed -e sollte anstelle von sed -r verwendet werden, das nicht existiert.
Dylan Daniels
1
@DylanDaniels Laut man sedUbuntu -rbedeutet die Option "erweiterte reguläre Ausdrücke verwenden". Der angegebene Befehl funktioniert also einwandfrei, obwohl er nicht die Funktionen erweiterter regulärer Ausdrücke benötigt, um zu funktionieren.
g
Flag für die globale Substitution, auch hier benötigen Sie die-r
Option nicht.Antworten:
Sie sollten den
g
Modifikator hinzufügen, damit sed den Inhalt des Musterpuffers global ersetzt:Eine fantastische Dokumentation zu sed finden Sie unter http://www.grymoire.com/Unix/Sed.html . Diese globale Flagge wird hier erklärt: http://www.grymoire.com/Unix/Sed.html#uh-6
Die offizielle Dokumentation
GNU sed
zu finden Sie unter http://www.gnu.org/software/sed/manual/.quelle
sed -E 's,foo,bar,g'
macht nicht die globale Sache. Wenn Sie es ändern,sed -E -e 's,foo,bar,g'
funktioniert es.Sie müssen ein
g
am Ende setzen, es steht für "global":quelle
man sed
Ubuntu-r
bedeutet die Option "erweiterte reguläre Ausdrücke verwenden". Der angegebene Befehl funktioniert also einwandfrei, obwohl er nicht die Funktionen erweiterter regulärer Ausdrücke benötigt, um zu funktionieren.