BASH-Verlaufsmanipulation: Suchen und Ersetzen

BASH-Verlaufsmanipulation: Suchen und Ersetzen

Es gibt eine wirklich praktische Funktion zur Parameter-/Variablenerweiterung in BASH, die ich für den Verlauf nicht sehe. Ich habe die Manpages für den Verlauf und für BASH selbst überprüft. Nicht da ... vielleicht habe ich es übersehen.

Beispiel: Ich verwende SSH häufig und kann dies mit variabler Erweiterung tun.

[email protected]

Angenommen, ich möchte nur den Host extrahieren – oder besser gesagt den Benutzernamen entfernen.

hostonly=${host##*@}

Wenn ich

echo $hostonly

Ich bekomme:

bar.org

Meine Frage: Ist dies mit dem Befehlszeilenverlauf möglich?

z.B.,

Befehl 1:

ssh [email protected]

Befehl 2:

ssh gary@!!:##*@

Das funktioniert natürlich nicht, aber kann jemand bestätigen, ob diese Art der Musterübereinstimmung verfügbar ist oder nicht?

Danke!

Bubnoff

Antwort1

Ein cleverer Trick, der oft übersehen wird, ist der rBefehl (der selbst ein Sonderfall des fcBefehls ist):

$ ssh [email protected]
(...)
$ r foo=baz

Der allgemeinere Fall ist

$ fc -s foo=bar ssh

Damit können Sie einen Befehl aus dem Verlauf nach Teilzeichenfolge auswählen, dann die angegebene Ersetzung vornehmen und ihn ausführen. Wenn Sie das weglassen -s, wird der Befehl $EDITORfür komplexere Änderungen in geladen. Durch die Bearbeitung der Befehlszeile ist dies meist nicht erforderlich, es gibt jedoch einige Bearbeitungen, die in der Befehlszeile schwierig durchzuführen sind.

Sie können auch relativ komplexe Manipulationen mithilfe !der History-Referenzsyntax durchführen, aber aus historischen Gründen (der grundlegende History-Mechanismus wurde bereits früh eingeführt cshund alle Erweiterungen haben die Kompatibilität größtenteils beibehalten) wird eine andere Syntax verwendet. SieheHierfür Details.

Antwort2

$ ssh [email protected]
...
$ ^foo^gary^
...

Der Befehl wird wiederholt, wobei als Benutzername „gary“ anstelle von „foo“ verwendet wird. Das Folgende funktioniert genauso:

$ ssh [email protected]
...
$ !!:s/foo/gary/
...

verwandte Informationen