Je suis un débutant Linux. J'ai besoin de rechercher une chaîne "teststring" dans tous les fichiers * .java sous / home / user1 / (y compris les sous-dossiers). Comment puis-je le faire sous linux via la commande shell.
Il y a eu plusieurs questions concernant la recherche d'expressions régulières dans les sous-répertoires de la ligne de commande
RobotHumans
une recherche rapide a révélé cette question: superuser.com/questions/208271/… pas exactement ce que vous cherchez, mais au lieu d'exécuter cp, vous pouvez cat / grep que ce soit
RobotHumans
Je peux lister le fichier ayant l'extension avec find / home / user1 -name * .java Comment utiliser grep là-dessus?
Darthvader
Réponses:
23
La façon la plus simple est d'utiliser les fonctionnalités de GNU grep:
grep -r --include '*.java' teststring /home/user1
Si vous êtes déjà sur une autre variante Unix qui n'a pas grep GNU, voici une méthode portable:
Pour cet ack aka ack-grep, c'est l'application la plus meurtrière dans mon esprit;)
Vous pouvez ack some_string /in/path_ytrouver some_string dans path_y
Ou plus simple ack some_other_stringde trouver some_other_sting dans le répertoire actuel.
En règle générale, vous devez utiliser -print0et -0lorsque la tuyauterie finddans xargsle travail correctement avec les fichiers qui peuvent avoir des espaces ou des sauts de ligne dans leur nom:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
Réponses:
La façon la plus simple est d'utiliser les fonctionnalités de GNU grep:
Si vous êtes déjà sur une autre variante Unix qui n'a pas grep GNU, voici une méthode portable:
la source
grep -r teststring .
en utilisant ack vous tapez simplement:
cd /home/user01 && ack --java teststring
la source
ack --java teststring /home/user01
Pour cet ack aka ack-grep, c'est l'application la plus meurtrière dans mon esprit;)
Vous pouvez
ack some_string /in/path_y
trouver some_string dans path_y Ou plus simpleack some_other_string
de trouver some_other_sting dans le répertoire actuel.la source
Je l'ai trouvé. L'afficher car cela pourrait aider quelqu'un.
Veuillez corriger s'il existe un meilleur moyen.
la source
-print0
et-0
lorsque la tuyauteriefind
dansxargs
le travail correctement avec les fichiers qui peuvent avoir des espaces ou des sauts de ligne dans leur nom:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
la source