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?

London
quelle

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
Dogbane
quelle
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.

Andy Lester
quelle
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
jhenninger
quelle
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
Zsolt Botykai
quelle
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"
Ghostdog74
quelle
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"}'
hannes
quelle
2

Unter diesem Link finden Sie den Linux-Befehl linux http://linuxcommand.org/man_pages/grep1.html

Verwenden Sie diesen Befehl in Ihrem Terminal oder cmd, GitBash (Powered by Terminal), um Zeile Nr., Codezeile und Datei anzuzeigen.

grep -irn "YourStringToBeSearch"
Vrushal Raut
quelle
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

Ehrlich abe
quelle