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?
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?
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/
Danke, das hat funktioniert :) – niagr
Sie haben ein g
am Ende zu setzen, steht es für „global“:
echo dog dog dos | sed -r 's:dog:log:g'
^
sed -e sollte anstelle von sed -r verwendet werden, was nicht existiert. –
@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. –
Sie benötigen die 'g' Flagge für die globale Substitution, Sie brauchen nicht auf die' -r' Option hier entweder . –