Bash: Wie kann ich eine Zeichenfolge in einem vorherigen Befehl ersetzen?


11

Ich muss ein Wort in der Zeile oder URL ersetzen, aber ich muss es über die Befehlszeile / das Terminal tun.

ich meine

$ ./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code1 -t query

Und von dort, ohne zurück, ich brauche zu ersetzen code1mit mycodeoder einer anderen Zeichenfolge.


Wieso brauchst du es?
Choroba

Darf die URL andere enthalten b?
Lesen

Können Sie bitte klarstellen, wie Sie die erste Zeichenfolge in die Eingabe erhalten. Aus Ihrem Beitrag geht hervor, dass es sich auf Ihrem Terminal befindet. Ebenso haben Sie es als Befehl eingegeben
lesen Sie den

Raja ... eine Variation von echo http://xxx.xxx.xxx.xxx/a/b/b/c/d/e | sed 's/b/c/g'? Bitte sagen Sie, was Sie tun möchten, führen Sie einen Befehl aus, rufen Sie ein Programm auf, das diese URL erreicht, ändern Sie einen Variablenwert ...?!?
Hastur

Antworten:


31

Ich habe Ihr Skript umbenannt, aber hier ist eine Option:

$ ./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code1 -t query

Verwenden Sie nach dem Ausführen des Skripts:

$ ^code1^code2

... was in ... resultiert:

./myscript.sh xxx.xxx.xxx.xxx:8080/code -c code2 -t query

man bash und suchen Sie nach "Event Designators":

^ string1 ^ string2 ^

Schnelle Substitution. Wiederholen Sie den letzten Befehl und ersetzen Sie string1 durch string2. Entspricht !!: s / string1 / string2 /

Bearbeiten, um globalen Ersatz hinzuzufügen, was ich gerade aus der Antwort von @ slm unter https://unix.stackexchange.com/a/116626/117549 gelernt habe :

$ !!:gs/string1/string2

was sagt:

!! - recall the last command
g - perform the substitution over the whole line
s/string1/string2 - replace string1 with string2

Hallo, ich habe einen Fall durchgemacht. Hier ist es. `Mv / server / logfile1 / nfs / logs / && gzip / nfs / logs / logfile1 &` und danach habe ich ^logfile1^logfile2nur Änderungen vorgenommen, die nur beim ersten Match angewendet wurden, aber nicht global bei gzip. Bitte helfen Sie. Vielen Dank.
rɑːdʒɑ

@ Raja Ich habe die Antwort mit globaler Suche und Ersetzung aktualisiert
Jeff Schaller

3
Natürlich verwenden Sie !!, um den vorherigen Befehl in seiner Gesamtheit unverändert zu wiederholen, aber fast alles, was damit beginnt, !!:kann auf verkürzt werden !:. zB , !:gs/string1/string2.
G-Man sagt "Reinstate Monica"

3
Die ^Syntax funktioniert zshauch. Nur für die Nachwelt dokumentieren.
Kevin Suttle

2
^foo^bar^:Gfür globales Suchen und Ersetzen.
HappyFace
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.