Frage

Gibt es eine Möglichkeit, einen Regexp-String-Replace für die aktuelle Zeile in der Bash auszuführen?

Ich befinde mich ziemlich oft in der Situation, dass ich eine lange Befehlszeile eingegeben habe und dann feststelle, dass ich irgendwo in der Zeile ein Wort ändern möchte.

Mein aktueller Ansatz besteht darin, die Zeile zu beenden und zu drücken Strg+A (um zum Zeilenanfang zu gelangen), fügen Sie ein # ein (um die Zeile auskommentieren), drücken Sie die Eingabetaste und verwenden Sie dann die ^oldword^newword Syntax (^oldword^newword führt den vorherigen Befehl aus, nachdem oldword durch newword ersetzt wurde).

Aber es muss einen besseren (schnelleren) Weg geben, dies zu erreichen.(Die Maus ist nicht möglich, da ich die meiste Zeit in einer SSH-Sitzung bin).

Wahrscheinlich gibt es dafür einen Emacs-ähnlichen Tastenbefehl, den ich nicht kenne.

Bearbeiten:Ich habe versucht, den vi-Modus zu verwenden.Etwas Komisches ist passiert.Obwohl ich ein begeisterter Vim-Benutzer bin, hatte ich ernsthafte Probleme bei der Verwendung meiner geliebten Bash.All diese Fingerbewegungen, die sich in mein Unterbewusstsein eingebrannt hatten, funktionierten plötzlich nicht mehr.Ich kehrte schnell in den Emacs-Modus zurück und überlegte, ob ich Emacs als meinen Lieblingseditor ausprobieren sollte (obwohl ich vermute, dass das Gleiche noch einmal passieren könnte).

War es hilfreich?

Lösung

Leider nein, es gibt keinen wirklich besseren Weg.Wenn Sie einfach keine Lust mehr haben, Tastenanschläge auszuführen, können Sie sie mithilfe von Makros reduzieren.Fügen Sie Folgendes zu Ihrem hinzu ~/.inputrc:

"\C-x6": "\C-a#\C-m^"
"\C-x7": "\C-m\C-P\C-a\C-d\C-m"

Jetzt, in einer neuen Bash-Instanz (oder nach dem Neuladen .inputrc in Ihrer aktuellen Shell durch Drücken von C-x C-r), können Sie Folgendes tun:

  1. Geben Sie einen falschen Befehl ein (z. B. ls abcxyz).
  2. Drücken Sie Strg-x und dann 6.Das Makro fügt eine ein # am Anfang der Zeile, führt die kommentierte Zeile aus und gibt Ihre erste ein ^.
  3. Geben Sie Ihre Korrektur ein (z. B. xyz^def).
  4. Drücken Sie Strg-x und dann 7.Das Makro schließt Ihre Ersetzung ab, geht dann zur vorherigen (kommentierten) Zeile, entfernt das Kommentarzeichen und führt es erneut aus.

Es ist nicht gerade elegant, aber ich denke, es ist das Beste, was Sie mit readline bekommen werden.

Andere Tipps

Wenn Sie in KSH im VI-Modus im Befehlsmodus „v“ drücken, wird eine vollständige VI-Sitzung mit dem Inhalt Ihrer aktuellen Befehlszeile gestartet.Anschließend können Sie die Bearbeitung mit allen vi-Befehlen durchführen (in Ihrem Fall globales Suchen und Ersetzen).Wenn :wq von vi ausgeht, wird der bearbeitete Befehl ausgeführt.Ich bin sicher, dass es für Bash etwas Ähnliches gibt.Da Bash dazu neigt, seine Vorgänger zu erweitern, gibt es wahrscheinlich etwas Ähnliches.

Tag auch,

Wie wäre es stattdessen mit der Verwendung des vi-Modus?Geben Sie einfach set -o vi ein

Dann können Sie zu dem Wort gehen, das Sie ändern möchten, und einfach ein CW oder CW ausführen, je nachdem, was im Wort steht.

Hoppla, ich habe vergessen, in der vorherigen Zeile im Befehlsverlauf ein ESC-K bis o einzufügen.

Was verwenden Sie normalerweise als Redakteur?

Prost, Rob

Bearbeiten:Was ich in meiner ursprünglichen Antwort vergessen habe zu sagen, war, dass Sie sich die vi-Befehlszeile in Bash mit den Befehlen vorstellen müssen, die Sie eingeben, wenn Sie sich in vi im „Ex“-Modus befinden, d. h.nachdem Sie den Doppelpunkt eingegeben haben.

Das Schlimmste ist, dass Sie sich mit den alten vi-Befehlen h (nach links) und l (nach rechts) durch Ihren Befehlsverlauf bewegen müssen.Sie können jedoch w (oder W) verwenden, um zwischen Wörtern zu springen.

Sobald Sie sich jedoch daran gewöhnt haben, stehen Ihnen alle möglichen Befehle zur Verfügung, z. B.Wenn Sie ESC / my_command eingeben, wird Ihr Verlauf noch einmal durchsucht (das Neueste zuerst), um das erste Vorkommen der Befehlszeile mit dem Text my_command zu finden.Sobald es das gefunden hat, können Sie n verwenden, um das nächste Vorkommen usw. zu finden.Und N, um die Suchrichtung umzukehren.

Ich würde mir die Manpage für Bash durchlesen, um zu sehen, was im vi-Modus verfügbar ist.Sobald Sie die Tatsache überwunden haben, dass der Aufwärts- und Abwärtspfeil durch ESC k und dann j ersetzt werden, werden Sie feststellen, dass der vi-Modus mehr als der emacs-Modus für die Befehlszeilenbearbeitung in Bash bietet.

IMHO natürlich!(-:

Emacs?Achtzig MB und ständiger Austausch!

Prost, Rob

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top