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?
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" *
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
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 :)