Rechercher un modèle de texte sous Linux


20

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:

find /home/user1 -name '*.java' -exec grep teststring {} +

nice ne connaissait pas cette fonctionnalité grep
RobotHumans

1
Si vous recherchez le répertoire actuel et tous les fichiers, c'estgrep -r teststring .
Chris Moschini


4

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.


2

Je l'ai trouvé. L'afficher car cela pourrait aider quelqu'un.

find /home/user01 -name *.java | xargs grep "teststring"

Veuillez corriger s'il existe un meilleur moyen.


3
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"
Suspendu jusqu'à nouvel ordre.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.