So führen Sie eine VIM-Suche durch: Inverse Suche für alle Zeilen ohne Text

18

Mit grep kann ich ein grep -v "meine Suche" ausführen, um alle Zeilen ohne "meine Suche" zu erhalten.

Mit sed kann ich sed '/ baz /! s / foo / bar / g' finden, um Ersatztext in Zeilen ohne baz zu finden

Gibt es eine Möglichkeit, dasselbe zu tun? Und ist es möglich, aber ohne die "s ///" Syntax. Verwenden Sie nur die Suchsyntax "/".

Nelaaro
quelle

Antworten:

29
:g/pattern/

Stimmt mit allen Linien überein, bei denen ein Muster gefunden wurde.

:v/pattern/

macht das Gegenteil. Sehen Sie :h globalfür weitere Details.

Du kannst es so benutzen:

:v/pattern/norm Ipattern not found - <CR>

"Muster nicht gefunden" vor jede Zeile stellen, die nicht "Muster" oder "Muster" enthält

:v/pattern/s/nrettap/pattern

Ersetzen Sie "nrettap" durch "pattern" in jeder Zeile, die kein "pattern" enthält.

Eingebildete Beispiele, ja.

romainl
quelle
Ich hab mich auf "nrettap" gefreut.
UncleZeiv
1

Verwenden des Befehls: vBearbeiten Der herkömmliche Ansatz zum Suchen von Linien, die keinem Muster entsprechen, besteht darin, den Befehl : v zu verwenden :

:v/Warning/p

Ein guter Trick bei der Arbeit mit einer großen Protokolldatei, bei der Sie so viele irrelevante Zeilen wie möglich herausfiltern möchten, bevor Sie mit der eigentlichen Suche beginnen, besteht darin, die Datei unter einem temporären Namen zu speichern und alle nicht übereinstimmenden Zeilen dort zu löschen:

:sav junk.log
:v/warning/d

Sie bearbeiten jetzt einen Klon Ihrer Originaldatei, wobei alle Zeilen, die nicht mit "warning" übereinstimmen, entfernt wurden, und Sie können ihn nach Belieben bearbeiten.

Ref: https://vim.fandom.com/wiki/Search_for_lines_not_containing_pattern_and_other_helpful_searches

Selbststart
quelle