Voici une technique simple et redoutablement utile pour rechercher une chaîne de texte dans les fichiers d’un répertoire, y compris dans ses sous-répertoires.
Sous Linux, j’utilise très souvent grep pour inspecter du code, retrouver une fonction, chercher une option dans une configuration, vérifier l’usage d’un hook WordPress, ou identifier rapidement où une chaîne apparaît dans un projet.
La commande est ancienne, stable, disponible partout, et elle fait exactement ce qu’on lui demande. Ce qui, pour un outil en ligne de commande, reste une qualité sous-estimée.
La syntaxe de base de grep
La syntaxe générale de grep est simple : on indique les options, le texte ou motif à rechercher, puis le fichier ou le répertoire à parcourir.
grep [options] "texte à rechercher" cheminLangage du code : JavaScript (javascript)
Exemple minimal pour chercher le mot recherche dans un fichier :
grep "recherche" fichier.txtLangage du code : JavaScript (javascript)
Pour chercher dans tous les fichiers d’un répertoire de manière récursive, on ajoute -r :
grep -r "recherche" .Langage du code : JavaScript (javascript)
Le point final . signifie “le répertoire courant”. Sans lui, grep ne sait pas forcément où chercher.
Rechercher une chaîne récursivement dans un projet
Dans un projet PHP, WordPress, JavaScript ou CSS, cette commande est une bonne base :
grep --color=auto --include='*.php' --include='*.js' --include='*.css' -rnw . -e "recherche"Langage du code : PHP (php)
Elle cherche la chaîne recherche dans les fichiers .php, .js et .css, en parcourant les sous-répertoires depuis le répertoire courant.
Détail des options :
--color=auto: colore les correspondances dans le terminal ;--include='*.php': limite la recherche aux fichiers PHP ;--include='*.js': ajoute les fichiers JavaScript ;--include='*.css': ajoute les fichiers CSS ;-r: recherche récursive ;-n: affiche le numéro de ligne ;-w: cherche un mot complet ;-e: indique explicitement le motif à rechercher.
La version historique avec une expansion Bash fonctionne aussi :
grep --color=auto --include='*.{php,js,css}' -rnw . -e "recherche"Langage du code : PHP (php)
Mais je préfère souvent répéter --include. C’est plus portable, plus lisible, et cela évite les surprises selon le shell utilisé.
Afficher uniquement les fichiers qui contiennent la chaîne
Si vous ne voulez pas afficher les lignes complètes, mais seulement la liste des fichiers contenant la chaîne, utilisez -l :
grep -rl "recherche" .Langage du code : JavaScript (javascript)
Avec des extensions ciblées :
grep -rl --include='*.php' --include='*.js' "recherche" .Langage du code : PHP (php)
C’est pratique pour savoir rapidement quels fichiers sont concernés, sans noyer le terminal sous 500 lignes de contexte.
Afficher le nom du fichier et le numéro de ligne
Pour travailler dans du code, l’option -n est indispensable. Elle affiche le numéro de ligne où la correspondance apparaît :
grep -rn "add_shortcode" wp-content/Langage du code : JavaScript (javascript)
Exemple de sortie :
wp-content/plugins/demo/plugin.php:42:add_shortcode( 'hello', 'demo_shortcode' );Langage du code : JavaScript (javascript)
Le format est simple : fichier, numéro de ligne, puis contenu de la ligne.
Ignorer la casse avec grep
Pour faire une recherche insensible à la casse, ajoutez -i :
grep -rni "woocommerce" wp-content/Langage du code : JavaScript (javascript)
Cette commande trouvera woocommerce, WooCommerce, WOOCOMMERCE, etc.
Vos mises à jour vous font peur ?
PHP 8.x qui casse un plugin, un thème qui n'est plus maintenu, une mise à jour de WooCommerce qui change tout — je gère les montées de version proprement, avec environnement de staging et rollback prévu.
Mettons votre stack à jour sans risque →Chercher un mot complet avec -w
L’option -w limite la recherche aux mots complets :
grep -rnw "post" wp-content/themes/Langage du code : JavaScript (javascript)
Elle évite de trouver des correspondances partielles dans des mots plus longs, comme postmeta, post_type ou repost, selon les séparateurs rencontrés.
Attention tout de même : dans du code, la notion de “mot” dépend des caractères. Pour chercher une fonction exacte, une regex bien écrite est parfois plus précise.
Chercher une chaîne exacte avec -F
Si vous cherchez une chaîne littérale qui contient des caractères spéciaux, utilisez -F. Cette option désactive l’interprétation regex et traite le motif comme du texte fixe.
grep -rnF "add_action( 'init'" wp-content/Langage du code : JavaScript (javascript)
C’est souvent plus rapide et plus sûr si vous ne voulez pas utiliser d’expression régulière.
Exemple avec une chaîne qui contient des crochets, points ou parenthèses :
grep -rnF "$wpdb->prefix" wp-content/Langage du code : JavaScript (javascript)
Sans -F, certains caractères pourraient être interprétés comme des éléments de regex. Et les regex adorent faire semblant d’avoir compris ce qu’on voulait dire.
Exclure des répertoires
Dans un projet WordPress ou Node, il est souvent inutile de chercher dans vendor, node_modules, les caches ou les dossiers de build.
Pour exclure des répertoires :
grep -rn "recherche" . \
--exclude-dir=node_modules \
--exclude-dir=vendor \
--exclude-dir=.git \
--exclude-dir=cacheLangage du code : JavaScript (javascript)
Version sur une seule ligne :
grep -rn "recherche" . --exclude-dir=node_modules --exclude-dir=vendor --exclude-dir=.git --exclude-dir=cacheLangage du code : JavaScript (javascript)
Sur de gros projets, ces exclusions changent tout. Sinon, vous risquez surtout de découvrir que node_modules contient l’univers observable.
Exclure certains fichiers
Pour ignorer des fichiers précis ou des extensions inutiles, utilisez --exclude :
grep -rn "recherche" . \
--exclude='*.min.js' \
--exclude='*.map' \
--exclude='*.log'Langage du code : JavaScript (javascript)
Version sur une seule ligne :
grep -rn "recherche" . --exclude='*.min.js' --exclude='*.map' --exclude='*.log'Langage du code : JavaScript (javascript)
C’est très utile pour éviter les fichiers générés, minifiés ou trop bruyants.
Rechercher dans certains types de fichiers
Pour chercher uniquement dans les fichiers PHP :
grep -rn --include='*.php' "add_action" wp-content/Langage du code : PHP (php)
Pour PHP, JavaScript et CSS :
grep -rn --include='*.php' --include='*.js' --include='*.css' "recherche" .Langage du code : PHP (php)
Pour les fichiers de configuration :
grep -rn --include='*.conf' --include='*.ini' --include='*.yml' --include='*.yaml' "memory_limit" /etc/Langage du code : PHP (php)
Les options --include et --exclude acceptent des motifs de fichiers. Pensez à les entourer de guillemets simples pour éviter que le shell les développe trop tôt.
Utiliser grep avec des expressions régulières
grep peut aussi chercher avec des expressions régulières. Exemple pour trouver des fonctions WordPress d’administration du type add_menu_page ou add_submenu_page :
grep --color=auto -HnR "add_[a-zA-Z_]*_page" /home/public_html/wp-content/plugins/Langage du code : JavaScript (javascript)
Détail rapide :
-H: affiche le nom du fichier ;-n: affiche le numéro de ligne ;-R: recherche récursive en suivant aussi certains liens symboliques selon le contexte ;--color=auto: colore les correspondances.
Pour une regex plus lisible avec alternance explicite :
grep -rnE "add_(menu|submenu|options|theme)_page" wp-content/plugins/Langage du code : JavaScript (javascript)
L’option -E active les expressions régulières étendues. Cela évite d’échapper certains caractères comme les parenthèses ou le pipe.
Rechercher plusieurs termes à la fois
Pour chercher plusieurs chaînes, vous pouvez utiliser plusieurs options -e :
grep -rn -e "add_action" -e "add_filter" wp-content/plugins/Langage du code : JavaScript (javascript)
Ou une regex étendue :
grep -rnE "add_action|add_filter" wp-content/plugins/Langage du code : JavaScript (javascript)
Pour une recherche insensible à la casse :
grep -rniE "error|warning|deprecated" logs/Langage du code : JavaScript (javascript)
Afficher du contexte autour des résultats
Pour voir quelques lignes avant et après chaque résultat, utilisez -C :
grep -rnC 3 "fatal error" /var/log/Langage du code : JavaScript (javascript)
Pour afficher seulement les lignes avant :
grep -rnB 3 "fatal error" /var/log/Langage du code : JavaScript (javascript)
Pour afficher seulement les lignes après :
grep -rnA 3 "fatal error" /var/log/Langage du code : JavaScript (javascript)
Ces options sont très pratiques dans les logs, où la ligne intéressante n’a souvent de sens qu’avec les lignes autour.
Compter les occurrences
Pour compter les lignes contenant une chaîne par fichier :
grep -rc "recherche" .Langage du code : JavaScript (javascript)
Pour compter toutes les lignes trouvées :
grep -r "recherche" . | wc -lLangage du code : JavaScript (javascript)
Si vous voulez compter les occurrences exactes, et non les lignes, utilisez -o :
grep -ro "recherche" . | wc -lLangage du code : JavaScript (javascript)
-o affiche uniquement la partie correspondante. Chaque occurrence devient donc une ligne, ce qui rend le comptage plus précis.
Chercher dans les logs en direct
Pour surveiller un log en direct et filtrer une chaîne :
tail -f /var/log/nginx/error.log | grep --color=auto "PHP message"Langage du code : JavaScript (javascript)
Pour filtrer plusieurs termes :
tail -f /var/log/nginx/error.log | grep --line-buffered -E "error|warning|fatal"Langage du code : JavaScript (javascript)
--line-buffered aide lorsque grep est utilisé dans un pipeline en temps réel. Sans lui, l’affichage peut être retardé par le buffering.
Cas pratique WordPress : trouver un hook ou une fonction
Pour trouver tous les usages de wp_enqueue_scripts dans un thème ou un plugin :
grep -rnF "wp_enqueue_scripts" wp-content/themes/ wp-content/plugins/Langage du code : JavaScript (javascript)
Pour trouver tous les shortcodes déclarés :
grep -rnF "add_shortcode" wp-content/Langage du code : JavaScript (javascript)
Pour trouver des appels directs à admin-ajax.php :
grep -rnF "admin-ajax.php" wp-content/Langage du code : JavaScript (javascript)
Pour auditer rapidement des fonctions obsolètes PHP :
grep -rnE "\b(ereg|eregi|mysql_query|mysql_connect|split)\s*\(" wp-content/Langage du code : JavaScript (javascript)
Très utile pour repérer du code legacy avant une montée de version PHP.
Grep ou ripgrep ?
grep est installé presque partout. C’est son énorme avantage.
Pour chercher dans du code au quotidien, ripgrep, ou rg, est souvent plus rapide et plus ergonomique. Il ignore automatiquement certains fichiers via .gitignore et offre une sortie très lisible.
Installer ripgrep sur Debian ou Ubuntu :
sudo apt install ripgrep
Exemple équivalent :
rg "add_shortcode" wp-content/Langage du code : JavaScript (javascript)
Pour un serveur minimal, grep reste parfait. Pour un poste de développement, rg devient vite addictif.
Commandes utiles à garder sous la main
Recherche récursive simple :
grep -rn "recherche" .Langage du code : JavaScript (javascript)
Recherche insensible à la casse :
grep -rni "recherche" .Langage du code : JavaScript (javascript)
Recherche dans certains fichiers seulement :
grep -rn --include='*.php' --include='*.js' "recherche" .Langage du code : PHP (php)
Recherche en excluant les dossiers bruyants :
grep -rn "recherche" . --exclude-dir=.git --exclude-dir=node_modules --exclude-dir=vendorLangage du code : JavaScript (javascript)
Recherche littérale, sans regex :
grep -rnF "chaîne exacte" .Langage du code : JavaScript (javascript)
Recherche regex étendue :
grep -rnE "add_(action|filter|shortcode)" wp-content/Langage du code : JavaScript (javascript)
Afficher seulement les fichiers concernés :
grep -rl "recherche" .Langage du code : JavaScript (javascript)
Pièges fréquents
Quelques erreurs reviennent souvent avec grep.
- Oublier le chemin final, souvent
.. - Ne pas entourer le motif avec des guillemets.
- Laisser le shell interpréter les caractères spéciaux trop tôt.
- Utiliser une regex alors qu’une recherche littérale avec
-Fsuffit. - Chercher dans
node_modulesouvendorsans exclusion. - Oublier
-net devoir relancer la commande pour avoir les numéros de ligne. - Confondre
-ret-Ravec les liens symboliques.
Mon réflexe le plus sûr pour du code reste souvent :
grep -rnF "texte exact" . --exclude-dir=.git --exclude-dir=node_modules --exclude-dir=vendorLangage du code : JavaScript (javascript)
Simple, rapide, lisible. C’est rarement une mauvaise base.
Résumé rapide
Pour rechercher une chaîne dans tous les fichiers d’un répertoire de manière récursive :
grep -rn "recherche" .Langage du code : JavaScript (javascript)
Pour chercher dans les fichiers PHP, JS et CSS uniquement :
grep --color=auto --include='*.php' --include='*.js' --include='*.css' -rnw . -e "recherche"Langage du code : PHP (php)
Pour utiliser une expression régulière :
grep -rnE "add_(menu|submenu|options)_page" wp-content/plugins/Langage du code : JavaScript (javascript)
Pour une chaîne exacte, sans regex :
grep -rnF "add_action( 'init'" wp-content/Langage du code : JavaScript (javascript)
Conclusion
grep est l’un des outils les plus utiles pour rechercher rapidement une chaîne dans des fichiers sous Linux.
Avec -r, il parcourt les dossiers récursivement. Avec -n, il affiche les numéros de ligne. Avec --include et --exclude-dir, il cible précisément les fichiers utiles. Avec -F ou -E, il s’adapte selon que vous cherchez une chaîne exacte ou une expression régulière.
Pour auditer du code, retrouver un hook WordPress, chercher une fonction obsolète ou diagnostiquer une configuration, grep reste un réflexe de base. Pas glamour. Mais diablement efficace.
Sources utiles
- GNU grep : manuel officiel
- man7.org : page de manuel grep
- Wikipedia : expressions régulières
- ripgrep : recherche récursive rapide dans le code
Un projet WordPress en tête ?
Vous avez une idée claire de ce que vous voulez, mais pas les ressources en interne pour le faire bien. Je développe des sites et extensions WordPress sur-mesure — sans délais à rallonge ni mauvaises surprises.
Décrivez-moi votre projet →


