Wie kann ich meine Grep-Ausgabe so formatieren, dass die Zeilennummern am Zeilenende und auch die Trefferanzahl angezeigt werden?


378

Ich verwende grep, um eine Zeichenfolge in einer Datei abzugleichen. Hier ist eine Beispieldatei:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt kehrt zurück

example two null,
example four null,

Wie kann ich übereinstimmende Zeilen zusammen mit ihren Zeilennummern wie folgt zurückgeben:

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

Ich weiß, dass -c insgesamt übereinstimmende Zeilen zurückgibt, aber ich weiß nicht, wie ich es richtig formatieren soll, um es total null countvorne hinzuzufügen , und ich weiß nicht, wie ich die Zeilennummern hinzufügen soll.

Was kann ich machen?

Antworten:


600

-n Gibt die Zeilennummer zurück.

-iist für Ignorierfall. Nur zu verwenden, wenn keine Fallübereinstimmung erforderlich ist

$ grep -in null myfile.txt

2:example two null,
4:example four null,

Kombinieren Sie mit awk, um die Zeilennummer nach dem Spiel auszudrucken:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

Verwenden Sie die Befehlssubstitution, um die Gesamtzahl der Nullen auszudrucken:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2

Kann ich dies formatieren, indem ich Zeilennummern nachher statt vorher mit: hinzufüge?
London

Ihre Lösung scheint in Ordnung zu sein, aber erhalten Sie einen Fehlerawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
London

Entschuldigung, wechselte zu Linux, jetzt funktioniert es :) Es war Windows-Version nicht so gut
London

1
... die Ritter, die sagen, -nidass Sie sich so an diesen Trick erinnern
santiago arizti

59

Verwenden Sie -noder --line-number.

Schauen Sie sich man grepfür viele weitere Optionen.


3
Neuer Linux-Benutzer ist faul beim Lesen der Manpage. Aber wenn sie Linux genug benutzen, werden sie daran
gewöhnt sein

19
Nicht immer faul (aber manchmal), oft hat ein neuer Linux-Benutzer Probleme, eine Manpage zu verstehen. (Sie können scheinen kryptisch)
TecBrat

Manchmal kann eine Manpage viele Seiten umfassen. Und das ist schwer zu lesen
Eugen Konkov

7

Verwenden Sie grep -n -i null myfile.txtdiese Option, um die Zeilennummer vor jedem Spiel auszugeben.

Ich glaube nicht, dass grep einen Schalter hat, um die Anzahl der übereinstimmenden Zeilen zu drucken, aber Sie können einfach die Ausgabe von grep in wc leiten, um dies zu erreichen:

grep -n -i null myfile.txt | wc -l

3
-c druckt die Gesamtzahl der übereinstimmenden Zeilen
dpatchery

Du hast recht. Leider unterdrückt es auch die normale Ausgabe.
Jhenninger

7

Oder verwenden Sie awkstattdessen:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file

4

grepFinden Sie die Zeilen und geben Sie die Zeilennummern aus, aber Sie können andere Dinge nicht "programmieren". Wenn Sie beliebigen Text einfügen und andere "Programmierungen" durchführen möchten, können Sie awk, verwenden.

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

Oder nur mit der Shell (bash / ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"

3

oder in Perl (der Vollständigkeit halber ...):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'


1

Ich dachte nur, ich hätte etwas, das dir in Zukunft helfen könnte. Geben Sie Folgendes ein, um mehrere Zeichenfolgen- und Ausgabezeilennummern zu durchsuchen und die Ausgabe zu durchsuchen:

egrep -ne 'null|three'

wird zeigen:

2:example two null,  
3:example three,  
4:example four null,   

egrep -ne 'null|three' | less

zeigt die Ausgabe in einer weniger Sitzung an

HTH Jun

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.