it-swarm.com.de

Wie kann ich meine grep-Ausgabe formatieren, um Zeilennummern am Ende der Zeile und auch die Trefferanzahl anzuzeigen?

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 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 die gesamten übereinstimmenden Zeilen zurückgibt, aber ich kann es nicht richtig formatieren, um total null count voran zu setzen, und ich kann die Zeilennummern nicht hinzufügen.

Was kann ich machen?

351
London

-n gibt die Zeilennummer zurück.

-i ist für Groß- und Kleinschreibung. Nur zu verwenden, wenn keine Übereinstimmung der Groß-/Kleinschreibung erforderlich ist

$ grep -in null myfile.txt

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

Kombiniere mit awk, um die Zeilennummer nach dem Match 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 Befehlsersetzung, um die Gesamtanzahl der Nullen auszudrucken:

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

Total null count : 2
560
dogbane

Verwenden Sie -n oder --line-number.

Weitere Optionen finden Sie unter man grep.

52
Andy Lester

Oder verwenden Sie stattdessen awk:

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

verwenden Sie grep -n -i null myfile.txt, um die Zeilennummer vor jeder Übereinstimmung 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
5
WakiMiko

grep findet die Zeilen und gibt die Zeilennummern aus, aber Sie können andere Dinge nicht "programmieren". Wenn Sie beliebigen Text einfügen und andere "Programmierungen" ausfü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
ghostdog74

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"}'
2
hannes

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

verwenden Sie zum Anzeigen von Zeilennummer, Codezeile und Datei diesen Befehl in Ihrem Terminal oder Cmd, GitBash (Powered by Terminal).

grep -irn "YourStringToBeSearch"
1
Vrushal Raut

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 kürzeren Sitzung an

HTH Jun

0
Honest Abe