Ich möchte nach einer Zeichenkette suchen und die Anzahl der Vorkommen in einer Datei mit dem Editor vi finden.Suche nach Zeichenketten und Zählung in vi Editor
Antwort
:g/xxxx/d
Dies wird alle Linien mit Muster löschen und berichten, wie viele gelöscht. Rückgängig machen, um sie zurückzubekommen.
Natürlich, er kann einfach das "d" weglassen, damit er nicht zur Operation muss. – Rook
Beachten Sie, dass dies nur angibt, wie viele Zeilen - nicht wie viele Vorkommen. Ich glaube, dirks ist eine bessere Lösung. –
Meine Lösung zählt korrekt mehrere Vorkommen innerhalb eine Zeile und es gibt nichts zu rückgängig machen. –
Sie benötigen die n
Flagge. Zu zählen Wörter verwenden:
:%s/\i\+/&/gn
und ein bestimmtes Wort:
:%s/the/&/gn
Siehe count-items
Dokumentation Abschnitt.
Wenn Sie einfach in ein:
%s/pattern/pattern/g
dann in der Statuszeile erhalten Sie die Anzahl der Spiele in vi auch geben.
Es sieht so aus als ob diese Antwort für Vim Benutzer und nicht für Vi lautet :( – kadeshpa
Hast du nur vi auf deinem System? Welche Version? – dirkgently
Jemand hat deine Frage mit vim darin markiert ... Ich habe es entfernt. – ojblass
Der Weg ist
:% s/Muster // gn
+1 für l ess tippen und auf den Punkt. – Leafy
Dies ist die authentischste Antwort ohne Übersteuerungstrick. – user1412066
Verwendung
:% s/Muster/\ 0/g
wenn Musterstring ist zu lang und du möchtest es nicht noch einmal tippen.
(ähnlich wie Gustavo sagte, aber zusätzlich:)
Für zuvor Suche, können Sie einfach:
:%s///gn
Ein Muster ist nicht erforderlich, da es bereits bei der Suche ist -Register (@/
).
"%" - do s/
in der gesamten Datei
"g" - Die globale Suche (mit mehreren Treffern in einer Zeile)
"n" - verhindert, dass Ersatz von s/
- nichts gelöscht! nichts muss rückgängig gemacht werden!
(siehe: :help s_flag
für weitere Informationen)
(Auf diese Weise ist es perfekt mit "Suche nach visuell markierten Text" funktioniert, wie in vim-wikia tip171 beschrieben)
Ich schlage vor, zu tun:
- Suchen Sie entweder mit
*
nach einer "begrenzten Suche" nach dem, was sich unter dem Cursor befindet, oder führen Sie eine Standard/pattern
Suche aus. - Verwenden Sie
:%s///gn
, um die Anzahl der Vorkommen zu erhalten.Oder Sie können:%s///n
verwenden, um die Anzahl der Zeilen mit Vorkommen zu erhalten.
** mir wirklich mit mir eine Plug-in, das Messaging geben würde finden konnte "Match N von N auf N Zeilen" mit jeder Suche, aber leider.
Hinweis: Nicht durch die knifflige Formulierung der Ausgabe verwirrt werden. Der vorherige Befehl könnte Ihnen etwas wie 4 matches on 3 lines
geben, wo letzteres Ihnen 3 matches on 3 lines
geben könnte. Während technisch genau ist, ist letzteres irreführend und sollte "3 Zeilen übereinstimmen" sagen. Wie Sie sehen können, gibt es wirklich nie die Notwendigkeit, die letztgenannte Form zu verwenden. Sie erhalten die gleichen Informationen, klarer und mehr mit dem 'gn' Formular.
Die ausgewählte Antwort (': g/xxxx/d') ist schrecklich, gefährlich und anderen auf dieser Seite unterlegen. Bitte deaktiviere es. –
ich stimme zu und es sagt Ihnen nur 'Zeilen gelöscht' nicht 'Vorkommen gelöscht' – user1709076