Lorsque vous utilisez find
, comment renvoyer le nom de fichier et le numéro de ligne lors de la recherche dune chaîne? Je parviens à renvoyer le nom du fichier dans une commande et les numéros de ligne avec une autre, mais je ne parviens pas à les combiner.
Noms de fichier: find . -type f -exec grep -l "string to search" {} \;
Numéros de ligne: find . -type f -exec grep -n "string to search" {} \;
Réponse
Le le commutateur de ligne de commande -H
force grep
à imprimer le nom du fichier, même avec un seul fichier.
% grep -n 7 test.in 7:7 % grep -Hn 7 test.in test.in:7:7
-H, --with-filename Print the filename for each match.
Notez que comme Kojiro le dit dans un commentaire , cela ne fait pas partie du standard POSIX, il est à la fois en grep GNU et BSD, mais il est possible que certains systèmes ne laient pas (par exemple Solaris).
Commentaires
Réponse
find . -type f -exec grep -n "string to search" /dev/null {} +
(ou avec GNU grep, voir le -H
option)
Commentaires
- + et -H fonctionnent très bien, merci!
- Et lié à cette réponse: unix.stackexchange.com/questions/3682/…
- +1 Exact, parce que faire en sorte que
grep
ait plusieurs arguments de nom de fichier le forcerait à afficher les noms de fichiers correspondants. Astucieux!
Réponse
Si votre grep prend en charge le -r
drapeau, ceci résout votre demande:
grep -rn "String to search " *
Commentaires
- Que ' est vrai, mais je ne ' voir ce que cela ajoute aux réponses existantes.
- Et sil ny en a quune (sans point ) dans le répertoire courant, cela naffiche pas le nom du fichier.
-H
àgrep
est une extension GNU non standard et représente une approche alternative pour les systèmes non GNU.