^Wort^ - Ersatz^ auf alle Spiele in der Bash?
Zu klären, ich bin auf der Suche nach einem Weg, um führen Sie eine globalen suchen und ersetzen auf der vorherigen Befehls verwendet. ^word^replacement^
scheint nur zu ersetzen, das erste match.
Gibt es einige set
option, entzieht sich mir?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
$ echo $BASH_VERSION
(2.05.8(1)-release)$ echo oneone
(aus: oneone)$ !!:gs/one/two
(aus: twoone) ...$ echo $BASH_VERSION
(aus: 3.2.25(1)-release)$ echo oneone
(aus: oneone)$ !!:gs/one/two
(aus: twotwo) ... Allgemeine Hinweise für alle Dinge, die bash? Verwenden Sie version 3+gs
hier bedeuten? Globale substitution?$ cp foo.h bar.h
$ !:gs/.h/.cpp
(Ausführung: cp foo.cpp bar.cpp)gs
ist die ghostscript-interpreter für PostScript. Dies ist kein bash, sondern ein externes Programm. Die Verwendung von @l3x-Lösung, die arbeitet auf eine variable. Für den globalen Austausch innerhalb dieser Variablen beginnen mit einem doppelten Schrägstrich${VAR//pattern/replacement}
Blending meine Antwort hier mit John Feminella Sie können dies tun, wenn Sie möchten, eine alias:
Den !! nur hat der Vorherige Befehl, während !?string? entspricht dem letzten Befehl mit "string".
Diese Lösung verwendet die Bash Teilzeichenfolge ersetzen:
Beachten Sie die Verwendung von doppelten Schrägstrichen steht für "global" string-Ersetzung.
Diese Lösung kann ausgeführt werden in einer Zeile.
Hier ist, wie Global ersetzen einer Zeichenfolge in einer Datei namens "myfile.txt":
Einen fiesen Weg, dies zu umgehen, könnte so etwas wie dieses:
Wollen echo
BAABAA
eher alsBLABLA
durch austauschen der LS für Einen istLeider ist diese Technik nicht zu funktionieren scheinen, in Funktionen oder Aliase.
Ich testen Sie es auf SUSE 10.1.
"^Wort^ - Ersatz^" nicht funktioniert, während "^Wort^ - Ersatz" funktioniert gut.
für eine Instanz:
ls /etc/passwd /etc/passwd
zuls /etc/hosts /etc/hosts
mit der^^
Umspannwerk Methode.