Comment obtenir le numéro de ligne de grep?

19

Le grep suivant

grep -r -e -n coll *

Affichera

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

Je voudrais savoir quelle ligne contient 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 fait quelque chose de bizarre.

Ce que j'aimerais voir (je me fiche du format) c'est

fullpath/filename:10:  <tag-name>coll</tag-name>
UAdapter
la source
1
Je vois des numéros de ligne lorsque j'utilise l' -noption. Pouvez-vous publier la sortie de ce que vous obtenez?
Kris Harper

Réponses:

18

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

lgarzo
la source
16

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 '^[^:]+'
Jonas
la source
1
Pour obtenir uniquement le numéro de ligne, il est plus facile à utiliser cut, par exemplecut -f1 -d:
wjandrea
1

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 cutcomme suggéré par @wjandrea:

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

  • <Pattern>est un modèle glob entre guillemets (utilisez l'option -Epour regexp);
  • <File> est le fichier qui vous intéresse;
  • le premier canal awk ...filtre les numéros de ligne dans la sortie de grep (avant :sur chaque ligne);
  • le deuxième canal garantit que les numéros de ligne n'apparaissent qu'une seule fois.
Sheljohn
la source
Pour obtenir uniquement le numéro de ligne, il est plus facile à utiliser cutque Awk, par exemplecut -f1 -d:
wjandrea
@wjandrea Plus facile de quelle manière?
Sheljohn
Je veux dire que la syntaxe est plus simple
wjandrea
@wjandrea Cela semble très objectif.
Sheljohn
@wjandrea Désolé pour le sarcasme, j'ai modifié pour inclure votre suggestion :)
Sheljohn