Je veux rechercher une chaîne et trouver le nombre d'occurrences dans un fichier à l'aide de l'éditeur vi.
Je veux rechercher une chaîne et trouver le nombre d'occurrences dans un fichier à l'aide de l'éditeur vi.
Réponses:
:g/xxxx/d
Cela supprimera toutes les lignes avec le motif et indiquera le nombre de lignes supprimées. Annuler pour les récupérer après.
LA façon est
:% s / modèle // gn
Vous avez besoin du n
drapeau. Pour compter les mots, utilisez:
:%s/\i\+/&/gn
et un mot particulier:
:%s/the/&/gn
Voir la 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.
(similaire à ce que dit Gustavo, mais en plus:)
Pour toute recherche antérieure , vous pouvez faire simplement:
:%s///gn
Un modèle n'est pas nécessaire, car il est déjà dans le registre de recherche ( @/
).
"%" - faire s/
dans tout le fichier
"g" - recherche globale (avec plusieurs résultats sur 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 " Rechercher du 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.
Réponse courte :
:% s / chaîne à rechercher // gn
Pour apprendre :
Il y a 3 modes dans l'éditeur VI comme ci-dessous
:
vous entrez à partir Command
de Command-line
Mode. Maintenant, tout ce que vous écrivez après :
est sur CLI (Interface de ligne de commande)%s
spécifie toutes les lignes. Spécifier la plage comme %
moyen d'effectuer une substitution dans tout le fichier. La syntaxe de la substitution de toutes les occurrences est:%s/old-text/new-text/g
g
spécifie toutes les occurrences de la ligne. Avec le g
drapeau, vous pouvez faire remplacer toute la ligne. Si cet g
indicateur n'est pas utilisé, seule la première occurrence de la ligne sera remplacée.n
spécifie le nombre d'occurrences de sortie //
la double barre oblique représente l'omission de replacement text
. Parce que nous voulons juste trouver.Une fois le nombre d'occurrences obtenu, vous pouvez appuyer sur la N
touche pour voir les occurrences une par une.
Pour rechercher et compter dans une plage particulière du numéro de ligne 1 à 10:
: 1,10s / bonjour // gn
%
que le fichier entier est remplacé par ,
des numéros de ligne séparés. Pour rechercher et remplacer dans une plage particulière de ligne numéro 1 à 10:
: 1,10s / helo / bonjour / gn
Je suggère de faire:
*
pour faire une "recherche limitée" pour ce qui se trouve sous le curseur, ou effectuez une /pattern
recherche standard .:%s///gn
pour obtenir le nombre d'occurrences. Ou vous pouvez utiliser :%s///n
pour obtenir le nombre de lignes avec des occurrences.** J'ai vraiment pu trouver un plug-in qui donnerait un message de "match N de N 1 sur N 2 lignes" à chaque recherche, mais hélas.
Remarque: ne soyez pas confus par la formulation délicate de la sortie. La première commande pourrait vous donner quelque chose comme ce que 4 matches on 3 lines
le second pourrait vous donner 3 matches on 3 lines
. Bien que techniquement précis, ce dernier est trompeur et devrait dire «3 lignes correspondent». Ainsi, comme vous pouvez le voir, il n'est vraiment jamais nécessaire d'utiliser cette dernière forme («n» uniquement). Vous obtenez les mêmes informations, plus clairement, et plus encore en utilisant le formulaire «gn».
:g/xxxx/d
) est terrible, dangereuse et inférieure aux autres sur cette page. Veuillez le désélectionner.