Ersetzen von. * In vi

Ich muss alle Vorkommen von „Punktstern“ ersetzen, wie hier gezeigt:

blah blah .*:.*:.* blah blah 

mit:

[0-9][0-9]:[0-9][0-9]:[0-9][0-9] 

, sodass das Endergebnis folgendermaßen aussieht:

blah blah [0-9][0-9]:[0-9][0-9]:[0-9][0-9] blah blah 

Ich habe verschiedene Varianten der folgenden ausprobiert, aber es hat nicht funktioniert:

%s_ .*:.*:.* _ [0-9][0-9]:[0-9][0-9]:[0-9][0-9] _g 

Antwort

Sie haben ein Beispiel für eine Zeile mit einem dreimal wiederholten „Sternchen“ angegeben, die durch Doppelpunkte getrennt sind. Wenn Ihre Daten immer so aussehen, können Sie sich auch an AlexPs Antwort . In Ihrer Frage heißt es jedoch , dass Sie alle Vorkommen von „Punkt-Sternchen“ ersetzen müssen. Wenn diese Anweisung von Wenn das Problem korrekt ist, sollten Sie

:%s/\.\*/[0-9][0-9]/g 

verwenden, um das „Sternchen“ zu finden und zu ersetzen, auch wenn es nicht in Dreiergruppen angezeigt wird.

Antwort

Für Vim:

Für sed: sed -e "s/\.\*:\.\*:\.\*/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/g".

  • % bedeutet, dass die Ersetzung auf alle Zeilen angewendet wird. wird in sed nicht benötigt, wo der Befehl standardmäßig auf alle Zeilen angewendet wird.
  • \. ist ein Punkt; Ein nacktes . bedeutet ein beliebiges Zeichen.
  • \* ist ein Sternchen. Ein nacktes * bedeutet 0 oder mehr des vorhergehenden Atoms.

Antwort

Verwenden des Modifikators nomagic für das Muster in Vim:

:%s/\M.*/[0-9][0-9]/g 

Die \M entfernt die Besonderheit von . und * im Muster.

Siehe :help magic in Vim.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.