web-dev-qa-db-fra.com

Comment obtenir le numéro de ligne de grep?

Le grep suivant

grep -r -e -n coll *

affichera

fullpath/filename:  <tag-name>coll</tag-name>

Je voudrais savoir quelle ligne a le texte suivant, j'ai essayé d'ajouter -n, mais cela n'a pas fonctionné. J'ai essayé d'ajouter | grep -n *, mais cela a eu un effet bizarre.

Ce que j'aimerais voir (peu m'importe le format), c'est

fullpath/filename:10:  <tag-name>coll</tag-name>
15
UAdapter

Vous devriez mettre -e à la fin de la liste des options: grep -rne coll *

17
lgarzo

pas besoin de -r & -e!

obtenir le numéro de ligne d'un motif!

grep -n "pattern" file.txt

si vous voulez obtenir uniquement le numéro de ligne en sortie, ajoutez-y une autre commande grep!

grep -n "pattern" file.txt | grep -Eo '^[^:]+'
13
Jonah

Pour grep un motif dans un fichier spécifique et obtenir les lignes correspondantes:

grep -n <Pattern> <File> | awk -F: '{ print $1 }' | sort -u

ou en utilisant cut comme suggéré par @wjandrea:

grep -n <Pattern> <File> | cut -f1 -d: | sort -u

  • <Pattern> est un motif global cité (utilisez l'option -E pour regexp);
  • <File> est le fichier qui vous intéresse;
  • le premier tube awk ... filtre les numéros de ligne dans la sortie de grep (avant : sur chaque ligne);
  • le second canal garantit que les numéros de ligne n'apparaissent qu'une seule fois.
1
Sheljohn