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 "/".

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.


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

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.