web-dev-qa-db-fra.com

Comment puis-je formater ma sortie grep pour afficher les numéros de ligne à la fin de la ligne, ainsi que le nombre de hits?

J'utilise grep pour faire correspondre une chaîne dans un fichier. Voici un exemple de fichier:

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

grep -i null myfile.txt retourne

example two null,
example four null,

Comment puis-je retourner des lignes correspondantes avec leurs numéros de ligne comme ceci:

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

Je sais que -c renvoie le nombre total de lignes correspondantes, mais je ne sais pas comment le formater correctement pour ajouter total null count devant, et je ne sais pas comment ajouter les numéros de ligne.

Que puis-je faire?

351
London

-n renvoie le numéro de la ligne.

-i est pour ignore-case. À n'utiliser que si la correspondance de casse n'est pas nécessaire

$ grep -in null myfile.txt

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

Combinez avec awk pour imprimer le numéro de ligne après le match:

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

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

Utilisez la substitution de commande pour imprimer le nombre total de null:

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

Total null count : 2
560
dogbane

Utilisez -n ou --line-number.

Découvrez man grep pour plus d'options.

52
Andy Lester

Ou utilisez awk à la place:

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

utilisez grep -n -i null myfile.txt pour indiquer le numéro de ligne devant chaque correspondance.

Je ne pense pas que grep dispose d'un commutateur pour imprimer le nombre total de lignes correspondantes, mais vous pouvez simplement diriger la sortie de grep dans wc pour accomplir cela:

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

grep trouve les lignes et affiche les numéros de ligne, mais ne vous permet pas de "programmer" d'autres choses. Si vous voulez inclure du texte arbitraire et faire une autre "programmation", vous pouvez utiliser awk,

$ 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

Ou seulement en utilisant le 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

ou en Perl (pour être complet ...):

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

Voir ce lien pour la commande linux linux http://linuxcommand.org/man_pages/grep1.html

pour afficher la ligne no, la ligne de code et le fichier, utilisez cette commande dans votre terminal ou cmd, GitBash (Powered by terminal)

grep -irn "YourStringToBeSearch"
1
Vrushal Raut

Je pensais juste que quelque chose pourrait vous aider dans le futur. Pour rechercher plusieurs chaînes et numéros de ligne de sortie et parcourir la sortie, tapez:

egrep -ne 'null|three'

montrera:

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

egrep -ne 'null|three' | less

affichera la sortie dans une session moins

HTH Jun

0
Honest Abe