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


378

J'utilise grep pour faire correspondre la 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 Retour

example two null,
example four null,

Comment puis-je renvoyer les 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 l'ajouter total null countdevant, et je ne sais pas comment ajouter les numéros de ligne.

Que puis-je faire?

Réponses:


600

-n renvoie le numéro de ligne.

-iest pour ignore-case. À utiliser uniquement 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 awkpour 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 nul total:

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

Total null count : 2

puis-je formater cela en ajoutant des numéros de ligne après au lieu d'avant avec:?
Londres

votre solution semble correcte mais obtenez une erreurawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
Londres

désolé passé à linux maintenant son fonctionnement :) c'était la version windows pas si bonne
Londres

1
... les chevaliers qui disent -nique vous vous souvenez de cette astuce
santiago arizti

59

Utilisez -nou --line-number.

Découvrez man grepbeaucoup plus d'options.


3
un nouvel utilisateur linux est paresseux de lire la page de manuel. Mais s'ils utilisent suffisamment Linux, ils y seront habitués :) C'est super utile :)
Dzung Nguyen

19
Pas toujours paresseux, (mais parfois), c'est souvent qu'un nouvel utilisateur Linux a du mal à comprendre une page de manuel. (Ils peuvent sembler énigmatiques)
TecBrat

parfois, la page de manuel peut prendre plusieurs pages. Et c'est difficile de les lire tous
Eugen Konkov

7

Utilisez grep -n -i null myfile.txtpour afficher le numéro de ligne devant chaque correspondance.

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

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

3
-c affichera le nombre total de lignes appariées
dpatchery

Tu as raison. Malheureusement, il supprime également la sortie normale.
jhenninger

7

Ou utilisez awkplutôt:

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

4

greptrouver les lignes et sortir les numéros de ligne, mais ne vous permet pas de "programmer" d'autres choses. Si vous voulez inclure du texte arbitraire et faire d'autres "programmations", 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 en utilisant uniquement 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

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

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


1

Je pensais juste que je pourrais vous aider à l'avenir. 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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.