J'utilise la commande suivante pour rechercher des fichiers avec une chaîne donnée:
find /var/www/http -type f | xargs grep -iR "STRING1"
Mais comment puis-je trouver des fichiers qui incluent "STRING1" OR "STRING2" OR "STRING3")?
Ce code ne fonctionne pas:
find /var/www/http -type f | xargs grep -iR "STRING1" | xargs grep -iR "STRING2"
POSIX, en utilisant grep
avec -E
option:
find /var/www/http -type f -exec grep -iE 'STRING1|STRING2' /dev/null {} +
Ou -e
:
find /var/www/http -type f -exec grep -i -e 'STRING' -e 'STRING2' /dev/null {} +
Avec certaines implémentations, au moins sur les systèmes GNU, OSX et FreeBSD, vous pouvez échapper |
:
find /var/www/http -type f -exec grep -i 'STRING1\|STRING2' /dev/null {} +
Pour faciliter la maintenance (si votre liste de chaînes à rechercher peut changer à l'avenir), je mettrais les modèles dans un fichier (par exemple, patterns.txt) et utiliserais le -f
commutateur (-R
n'est pas nécessaire si vous limitez find
aux fichiers; -H
vous donnera le nom du fichier au cas où il n'y en aurait qu'un; -F
oblige grep à traiter les modèles que vous recherchez comme des chaînes, et non des expressions régulières, ce qui est généralement ce que vous voulez):
find /var/www/http -type f -exec grep -iHFf patterns.txt {} +
Quel est le problème avec l'utilisation de egrep
?
egrep -r 'string1|string2|string3' /var/www/http