2010-10-19 3 views
269

Ich verwende grep, um eine Zeichenfolge in einer Datei abzugleichen. Hier ist ein Beispiel-Datei:Wie kann ich meine Grep-Ausgabe so formatieren, dass die Zeilennummern am Ende der Zeile und die Trefferanzahl angezeigt werden?

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

grep -i null myfile.txt kehrt

example two null, 
example four null, 

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

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

Ich weiß -c kehrt abgestimmt gesamt Zeilen, aber ich nicht, wie es richtig formatieren, um total null count in Front hinzuzufügen, und ich weiß nicht, wie Sie die Zeilennummern hinzufügen.

Was kann ich tun?

Antwort

434

-n gibt die Zeilennummer zurück.

-i ist für ignorieren-Fall. Nur verwendet werden, wenn Fall Anpassung nicht erforderlich ist,

$ grep -in null myfile.txt 

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

mit awk Kombinieren Sie die Zeilennummer nach dem Spiel zum Ausdrucken:

$ 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 Befehl Substitution aus der Gesamt null Zahl zu drucken:

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

Total null count : 2 
+0

kann ich dies formatieren, indem Sie Zeilennummern nach anstelle von vorher mit hinzufügen:? – London

+1

Sicher, ich habe meine Antwort aktualisiert. – dogbane

+0

Ihre Lösung scheint in Ordnung, aber ein Fehler 'awk95 erhalten: Syntaxfehler bei Quellenleitung Kontext ist >>> '<<< fehlt} awk95: Rettung an der Quelle Linie 1' – London

38

Verwenden Sie -n oder --line-number.

Check out man grep für viele weitere Optionen.

+2

neuer Linux-Benutzer ist faul beim Lesen der Manpage. Aber wenn sie Linux genug benutzen, werden sie daran gewöhnt sein :) Es ist super nützlich :) – nXqd

+11

Nicht immer faul, (aber manchmal), es ist oft so, dass ein neuer Linux-Benutzer Probleme hat, eine Manpage zu verstehen. (Sie können _seem_ kryptisch) – TecBrat

5

Verwenden Sie grep -n -i null myfile.txt, um die Zeilennummer vor jeder Übereinstimmung auszugeben.

Ich denke nicht, grep einen Schalter hat die Anzahl der Gesamt Linien angepasst zu drucken, aber Sie können die gerade Ausgang des Rohres grep in WC zu erreichen:

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

-c wird die Summe der Linien übereinstimmen – dpatchery

+0

Sie haben Recht. Leider unterdrückt es auch die normale Ausgabe. – WakiMiko

3

grep die Linien und die Zeilennummern finden, aber Sie können nicht andere Dinge "programmieren". Wenn Sie beliebigen Text enthalten sein sollen und tun andere "Programmierung", 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" 
6

Oder verwenden awk statt:

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

oder in Perl (für die Vollständigkeit ...):

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

diesen Link für Linux-Befehl Linux Siehe http://linuxcommand.org/man_pages/grep1.html

zur Anzeige Linie nein, Codezeile und Datei Verwendung dieser Befehl in Ihrem Terminal oder cmd, GitBash (Powered by Terminal)

grep -irn "YourStringToBeSearch" 
Verwandte Themen