Wenn ich diesen Code in bash ausführe:
echo dog dog dos | sed -r 's:dog:log:'
es gibt Ausgabe:
log dog dos
Wie kann ich dafür sorgen, dass alle Vorkommen von Hunden ersetzt werden?
Wenn ich diesen Code in bash ausführe:
echo dog dog dos | sed -r 's:dog:log:'
es gibt Ausgabe:
log dog dos
Wie kann ich dafür sorgen, dass alle Vorkommen von Hunden ersetzt werden?
Antworten:
Sie sollten den gModifikator hinzufügen, damit sed den Inhalt des Musterpuffers global ersetzt:
echo dog dog dos | sed -e 's:dog:log:g'
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 sedzu finden Sie unter http://www.gnu.org/software/sed/manual/.
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 gam Ende setzen, es steht für "global":
echo dog dog dos | sed -r 's:dog:log:g'
^
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.
gFlag für die globale Substitution, auch hier benötigen Sie die-rOption nicht.