web-dev-qa-db-fra.com

Afficher le nom du fichier et le numéro de ligne dans la sortie de grep

J'essaie de rechercher mon répertoire Rails à l'aide de grep. Je recherche un mot spécifique et je souhaite que grep imprime le nom du fichier et le numéro de la ligne.

Y a-t-il un drapeau grep qui fera cela pour moi? J'ai essayé d'utiliser une combinaison de -n et -l _ mais ce sont soit des noms de fichiers sans numéros qui sont imprimés, soit une quantité importante de texte transmis au terminal qui ne peut pas être lu facilement.

ex:

  grep -ln "search" *

Est-ce que j'ai besoin de le piquer pour que ça crache?

79
trev9065

Je pense -l est trop restrictif car il supprime la sortie de -n. Je voudrais suggerer -H (--with-filename): Affiche le nom du fichier pour chaque correspondance.

grep -Hn "search" *

Si cela donne trop de sortie, essayez -o pour n'imprimer que la partie correspondante.

grep -nHo "search" * 
123
spokeadoke
grep -rin searchstring * | cut -d: -f1-2

Cela signifie, recherchez récursivement (pour la chaîne searchstring dans cet exemple), en ignorant la casse et en affichant les numéros de ligne. La sortie de ce grep ressemblera à quelque chose comme:

/path/to/result/file.name:100: Line in file where 'searchstring' is found.

Ensuite, nous transmettons le résultat à la commande cut en utilisant deux points : comme notre délimiteur de champs et affichant les champs 1 à 2.

Quand je n'ai pas besoin des numéros de ligne, j'utilise souvent -f1 (uniquement le nom de fichier et le chemin), puis dirigez la sortie vers uniq, afin que je ne voie qu'une seule fois chaque nom de fichier:

grep -ir searchstring * | cut -d: -f1 | uniq
29
JBW

J'aime utiliser:

grep -niro 'searchstring' <path>

Mais c'est simplement parce que j'oublie toujours les autres moyens et que je ne peux pas oublier Robert de grep - niro pour une raison quelconque :)

12
Peter Versnee