2 votes

Comment combiner find et grep pour rechercher récursivement str ou str2 dans les fichiers *.html et *.php de /home/smith/sourcecode ?

Comment combiner find et grep pour rechercher str1 ou str2 récursivement, dans tous les fichiers *.html et *.php à partir d'un répertoire nommé /home/smith/source ? La sortie doit seulement lister les fichiers (avec le chemin d'accès), pas la chaîne de caractères recherchée. J'ai essayé de nombreuses variantes sans succès. Il existe de nombreux exemples sur la façon de procéder pour un motif de fichier ou une chaîne de caractères, mais pas pour des motifs de fichiers multiples et des chaînes de caractères multiples récursivement .

4voto

DavidJBerman Points 554

Les autres sont tous corrects, mais avec une version moderne de grep disponible, ils sont excessifs à mon avis. Ce qui suit analysera récursivement les fichiers ayant une extension .html ou .php et renverra le nom et le chemin de chaque fichier dont au moins une ligne correspond à str1 ou str2. Notez que la répétition de -e permettent de spécifier plusieurs chemins sans utiliser la syntaxe des expressions rationnelles.

grep -r --files-with-matches --include ' .html' --inclure ' .php' -e str1 -e str2 /home/smith/source

Un seul outil, un seul processus, pas de bifurcation supplémentaire ou d'analyse de fichiers non pertinents. Il faut juste une version relativement récente de gnu grep pour l'option --include, faute de quoi vous devrez faire un grep en plusieurs étapes comme proposé par d'autres.

3voto

user1841243 Points 115
egrep 'string1|string2' /home/smith/source/*.{html,php}

ou la recherche récursive de n'importe quel type de fichier à l'intérieur d'un répertoire,

egrep -R 'string1|string2' /home/smith/source

vous pouvez combiner cela avec un autre egrep dans le pipe :

egrep -R 'string1|string2' /home/smith/source | egrep '.html|.php'

1voto

suspectus Points 4495

Utilisation egrep et utilisez | pour spécifier str1 ou str2- :

find /home/smith/source -name \*.html -o -name \*.php -exec egrep -H 'str1|str2' {} \;

1voto

Andy Lester Points 1173

Si vous utilisez ack (voir http://beyondgrep.com ), vous pouvez faire ceci :

ack --php --html -l 'str1|str2' /home/smith/source

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X