Was ist, wenn ich für Zeilen mit "zwei" grep wollen, aber ich möchte nur die 2. Übereinstimmung. Also ich möchte das Ergebnis "zweichicken".Nur die n-te Übereinstimmung von grep anzeigen
Antwort
versuchen Sie dies:
awk '/two/{i++}i==2' file
mit Ihren Daten:
kent$ echo "onefish
onechicken
twofish
twochicken
twocows
threechicken"|awk '/two/{i++}i==2'
twochicken
note: wenn die Datei sehr groß ist, dies zu tun:
awk '/two/{i++}i==2{print; exit}' file
grep -m2 "two" in-file.txt | tail -n1
Stoppen Sie nach der zweiten Übereinstimmung, dann nehmen Sie die zweite gedruckte Zeile.
das nicht genau das tut, was erwartet wird. Wenn es mehr Übereinstimmungen als zwei gibt, wird es mehrere Zeilen ausgeben ... – poncha
Der Schwanz sollte sein: 'tail -n1'. – Thor
@ponacha: wirklich? Das grep -m2 stellt sicher, dass es nur zwei Übereinstimmungen gibt. Ich habe es trotzdem geändert, obwohl ich denke, dass es früher OK war. –
Wenn das Wort (hier word == zwei) wiederholt mehrere Zeit in einer einzigen Zeile, & Sie wollen prin t dieser Linie, verwenden unter:
word=two
n=2
line=`grep -m$n $word -o -n MyFile | sed -n $n's/:.*//p'`
awk 'FNR=='$line'{print; exit}' MyFile
z.B. Für unter Eingabe:
onefish
onechicken
twotwofish
twochicken
twocows
threechicken
wird es twotwofish
drucken, statt twochicken
.
Dies ist möglicherweise nicht das, was user1787038 will, aber hinzugefügt, um meinen eigenen Kommentar zu beantworten.
'-m $ n' in der Grep-Zeile dient nur der Optimierung, nicht für die Funktionalität. – anishsane
Es sollte beachtet werden, dass, wenn die threechicken
und twocows
Linien getauscht wurden, auch bekannt als:
onefish
onechicken
twofish
twochicken
threechicken
twocows
dann Kents erste Antwort (awk '/two/{i++}i==2' file
) die Ausgabe ergeben würde:
twochicken
threechicken
, weil es ein anderer nimmt Auftreten der Übereinstimmung, um den Zähler zu erhöhen. Seine letzte Antwort: awk '/two/{i++}i==2{print; exit}' file
vermeidet dieses Problem.
- 1. Nur exakte Übereinstimmungen mit GREP anzeigen
- 2. grep - Zeile vorher drucken, nicht drucken Übereinstimmung
- 3. Nur Übereinstimmung des ersten Auftretens der Ziffer
- 4. Grep Ausgabe nur die Regex passt
- 5. In Grep auf Ubuntu, wie kann ich nur die Zeichenfolge anzeigen, die dem regulären Ausdruck entspricht?
- 6. Wie grep nur die passende Regex?
- 7. Grep nur das erste Spiel und stopp
- 8. Wie bekomme ich die nte Reihe von Spark RDD?
- 9. Nte Perzentil Berechnungen in Postgresql
- 10. R: teilweise Übereinstimmung Wörterbuch Begriffe mit grep und tm-Paket
- 11. So verwenden Sie grep(), um eine exakte Übereinstimmung zu finden
- 12. Grep-Extrakt nur ganzes Wort
- 13. gnuplot: nur die Wurzeln anzeigen
- 14. Nur die letzte Zeile anzeigen
- 15. Nur die aktuelle Woche anzeigen
- 16. PROLOG-Regel gibt nur erste Übereinstimmung zurück
- 17. Left Outer Join mit nur einer Übereinstimmung
- 18. lösche jede nte Seite eines PDFs
- 19. Yacc liest nur die erste Übereinstimmung der Regel
- 20. Regulärer Ausdruck, der die Übereinstimmung nur für "." Schwierigkeiten
- 21. Regex erfasst nur die letzte Instanz der Erfassungsgruppe in Übereinstimmung
- 22. WHERE_IN gibt nur die erste Übereinstimmung in Codekennung zurück
- 23. Überspringen von Linien in Grep
- 24. Oracle SQL Update jede nte Zeile
- 25. grep „+“ Operator nicht
- 26. Excel-Suchformel funktioniert nur bei genauer Übereinstimmung
- 27. Grep regex, um nur 10 Zeichen auszuwählen
- 28. Willst du nur in grep übereinstimmen
- 29. Wie grep nur zeigen Pfad/Dateiname?
- 30. Wählen Sie jede nte Zeile in SQLite3
die zweite Option ist überlegen, unabhängig von der Dateigröße, nein? – poncha
@ponacha, Zeilennummer – Kent
was meinst du mit 'Zeilennummer'? Ich meinte damit, '{print; Ausgang} 'wäre eine gute Idee für jede Eingangsgröße ... oh. das war Option # 3 eigentlich;) Ich zählte falsch))) – poncha