comment faire une recherche inverse de recherche vim pour toutes les lignes sans texte

18

avec grep je peux faire un grep -v "ma recherche" pour obtenir toutes les lignes sans "ma recherche"

avec sed je peux sed '/ baz /! s / foo / bar / g' pour trouver remplacer le texte sur les lignes sans baz

Existe-t-il un moyen de faire la même chose vim. Et est-ce possible mais sans la syntaxe "s ///". En utilisant uniquement la syntaxe de recherche "/".

nelaaro
la source

Réponses:

29
:g/pattern/

correspond à toutes les lignes où le motif a été trouvé.

:v/pattern/

fait le contraire. Voir :h globalpour plus de détails.

Vous pouvez l'utiliser comme ceci:

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

pour ajouter "motif introuvable -" à chaque ligne qui n'a pas "motif" ou

:v/pattern/s/nrettap/pattern

pour remplacer "nrettap" par "pattern" sur chaque ligne qui n'a pas "pattern".

Des exemples artificiels, oui.

romainl
la source
J'ai lol'd sur "nrettap".
UncleZeiv
1

Utilisation de la commande: vEdit L'approche traditionnelle pour rechercher des lignes ne correspondant pas à un modèle utilise la commande : v :

:v/Warning/p

Une astuce intéressante lorsque vous travaillez avec un fichier journal volumineux dans lequel vous souhaitez filtrer autant de lignes non pertinentes que possible avant de commencer votre recherche réelle consiste à enregistrer le fichier sous un nom temporaire et à supprimer toutes les lignes non correspondantes:

:sav junk.log
:v/warning/d

Vous êtes en train d'éditer un clone de votre fichier d'origine avec toutes les lignes ne correspondant pas à "avertissement" supprimées et vous pouvez le modifier à volonté.

Réf: https://vim.fandom.com/wiki/Search_for_lines_not_containing_pattern_and_other_helpful_searches

amorçage
la source