Je veux rechercher une chaîne et trouver le nombre d'occurrences dans un fichier à l'aide de l'éditeur vi.
:g/xxxx/d
Cela supprimera toutes les lignes avec un motif et indiquera le nombre de lignes supprimées. Annuler pour les récupérer après.
LA façon est
:% s/pattern // gn
Vous avez besoin du drapeau n
. Pour compter les mots, utilisez:
:%s/\i\+/&/gn
et un mot particulier:
:%s/the/&/gn
Voir count-items
section documentation.
Si vous tapez simplement:
%s/pattern/pattern/g
alors la ligne d'état vous donnera également le nombre de correspondances dans vi.
:% s/string/string/g donnera la réponse.
(semblable comme l'a dit Gustavo, mais en plus:)
Pour toute recherche précédemment, vous pouvez faire simplement:
:%s///gn
Un modèle n'est pas nécessaire, car il est déjà dans le registre de recherche (@/
).
"%" - fait s/
dans tout le fichier
"g" - recherche globale (avec plusieurs occurrences dans une ligne)
"n" - empêche tout remplacement de s/
- rien n'est supprimé! rien ne doit être défait!
(voir: :help s_flag
pour plus d'informations)
(De cette façon, cela fonctionne parfaitement avec "Recherche de texte sélectionné visuellement", comme décrit dans vim-wikia tip171 )
utilisation
:% s/motif/\ 0/g
lorsque la chaîne de motif est trop longue et que vous n'aimez pas tout taper à nouveau.
Je suggère de faire:
*
pour effectuer une "recherche délimitée" du contenu sous le curseur ou effectuez une recherche standard /pattern
.:%s///gn
pour obtenir le nombre d'occurrences. Ou vous pouvez utiliser :%s///n
pour obtenir le nombre de lignes avec des occurrences.** Je pourrais vraiment trouver un plug-in qui donnerait un message de "correspondance N sur N1 sur N2 lignes "à chaque recherche, mais hélas.
Remarque: Ne soyez pas dérouté par la formulation difficile de la sortie. La première commande peut vous donner quelque chose comme 4 matches on 3 lines
alors que la dernière peut vous donner 3 matches on 3 lines
. Bien que techniquement soit exact, ce dernier est trompeur et devrait indiquer «correspondance de 3 lignes». Ainsi, comme vous pouvez le constater, il n’est jamais vraiment nécessaire d’utiliser ce dernier formulaire ('n' seulement). Vous obtenez les mêmes informations, plus clairement, et plus, en utilisant le formulaire 'gn'.