2013-04-06 12 views
75

Wenn ich diesen Code in bash ausführen:Warum ersetzt sed nicht alle Vorkommen?

echo dog dog dos | sed -r 's:dog:log:' 

es gibt Ausgang:

log dog dos 

Wie kann ich es alle Vorkommen des Hundes machen ersetzen?

+2

Sie benötigen die 'g' Flagge für die globale Substitution, Sie brauchen nicht auf die' -r' Option hier entweder . –

Antwort

122

Sie sollen den g Modifikator hinzufügen, damit sed, dass führt eine globale Substitution des Inhalts des Musterpuffers :

echo dog dog dos | sed -e 's:dog:log:g' 

Für eine fantastische Dokumentation auf sed, überprüfen http://www.grymoire.com/Unix/Sed.html. Dieses globale Flagge wird hier erklärt: http://www.grymoire.com/Unix/Sed.html#uh-6

Die offizielle Dokumentation für GNU sed finden Sie unter http://www.gnu.org/software/sed/manual/

+0

Danke, das hat funktioniert :) – niagr

18

Sie haben ein g am Ende zu setzen, steht es für „global“:

echo dog dog dos | sed -r 's:dog:log:g' 
            ^
+1

sed -e sollte anstelle von sed -r verwendet werden, was nicht existiert. –

+0

@DylanDaniels Laut 'man sed' auf Ubuntu bedeutet die' -r'-Option "erweiterte reguläre Ausdrücke verwenden". Der angegebene Befehl funktioniert also gut, obwohl er nicht die Funktionen erweiterter regulärer Ausdrücke benötigt. –

Verwandte Themen