Maison >Tutoriel système >Linux >Comment trouver des fichiers contenant du texte spécifique à l'aide de Grep et Ripgrep dans Linux
Les commandes grep
et ripgrep
dans les systèmes Linux sont de puissants outils de recherche de mode de texte qui offrent plusieurs options pour affiner les recherches et améliorer l'efficacité. Ce guide détaillera comment utiliser ces deux commandes pour trouver des fichiers contenant des chaînes de texte spécifiques dans le contenu d'un fichier.
Table des matières
ripgrep
grep
et ripgrep
pour rechercher du texte dans un fichiergrep
pour trouver tous les fichiers dont le contenu contient une chaîne de texte spécifique?grep
?grep
?ripgrep
et pourquoi devrais-je l'utiliser?ripgrep
?ripgrep
couramment utilisés?ripgrep
en utilisant différentes options?grep
pour trouver des fichiers contenant des chaînes de texte spécifiques grep
(Global régulier Expression Print) est un utilitaire de ligne de commande qui recherche des modèles dans les fichiers et les impressions correspondant aux lignes. Il s'agit d'un puissant outil de traitement de texte qui est largement utilisé dans les systèmes d'exploitation de type UNIX, y compris Linux.
grep
prend en charge les expressions régulières, ce qui lui permet d'effectuer une correspondance complexe de motifs complexes. Pour plus de détails sur l'utilisation des commandes grep
, consultez le guide suivant:
grep
(débutants)
Discutons maintenant de la façon d'utiliser la commande grep
pour trouver des fichiers contenant des mots ou des phrases spécifiques dans Linux.
Pour rechercher récursivement un modèle de texte spécifique (y compris les liens symboliques) et afficher les numéros de ligne que le modèle correspond, utilisez la commande suivante:
<code>grep -Rnw '/path/to/directory/' -e 'pattern'</code>
-R
: Effectuez une recherche récursive, y compris les liens symboliques.-n
: Afficher les numéros de ligne correspondants.-w
: Faites correspondre le mot entier uniquement.-e
: Spécifiez le modèle à rechercher. Remplacer /path/to/directory/
par le répertoire que vous recherchez et 'pattern'
par le modèle de texte que vous recherchez.
Pour rechercher des fichiers avec des extensions spécifiques, telles que les fichiers .txt
et .md
, utilisez l'option --include
:
<code>grep --include=\*.{txt,md} -Rnw '/path/to/directory/' -e 'pattern'</code>
Pour exclure les fichiers avec des extensions spécifiques, telles que les fichiers .bak
et .tmp
, utilisez l'option --exclude
:
<code>grep --exclude=\*.{bak,tmp} -Rnw '/path/to/directory/' -e 'pattern'</code>
Pour exclure certains répertoires des recherches, telles que node_modules
, .git
, et les répertoires commençant par temp_
, utilisez l'option --exclude-dir
:
<code>grep --exclude-dir={node_modules,.git,temp_*} -Rnw '/path/to/directory/' -e 'pattern'</code>
Pour afficher uniquement les noms de fichiers contenant des modèles (triés alphabétiques), utilisez l'option -l
et combinez avec sort
:
<code>grep -Rlnw '/path/to/directory/' -e 'pattern' | sort</code>
Pour afficher des lignes qui ne correspondent pas au modèle, utilisez l'option -v
:
<code>grep -Rnwv '/path/to/directory/' -e 'pattern'</code>
Pour afficher le nombre de lignes correspondantes pour chaque fichier, utilisez l'option -c
:
<code>grep -Rnwc '/path/to/directory/' -e 'pattern'</code>
Ces exemples démontrent d'autres options avancées pour la recherche de texte affinée à l'aide grep
sur Linux.
Certaines des commandes suivantes doivent être exécutées avec des autorisations sudo
ou root.
1. Recherchez la chaîne "Mot de passe" dans tous les fichiers du répertoire actuel:
<code>grep -Rnw '.' -e 'password'</code>
2. Recherchez "utilisateur" dans le répertoire /etc
insensiblement:
<code>grep -Rinw '/etc' -e 'user'</code>
3. Recherchez le mot "principal" dans le répertoire /home/user/projects
:
<code>grep -Rnw '/home/user/projects' -e 'main'</code>
4. Recherchez "TODO" dans tous les fichiers .py
dans le répertoire actuel:
<code>grep --include=\*.py -Rnw '.' -e 'TODO'</code>
5. Recherchez "Confidentiel" dans le répertoire /var/logs
et excluez le fichier .log
:
<code>grep --exclude=\*.log -Rnw '/var/logs' -e 'confidential'</code>
6. Recherchez "Erreur" dans le répertoire /var/log
et affichez uniquement le nom du fichier:
<code>grep -Rlnw '/var/log' -e 'error'</code>
7. Rechercher "échouer" dans le fichier compressé (par exemple backup.zip
):
<code>zgrep -i 'fail' backup.zip</code>
8. Statistiques Le nombre de lignes contenant le mot "Erreur" dans le répertoire /var/log
:
<code>grep -Rnwc '/var/log' -e 'error'</code>
Ces commandes et options devraient couvrir la plupart des exigences de recherche de texte dans un environnement Linux.
ripgrep
ripgrep
( rg
) est une alternative moderne à grep
, conçue pour être plus rapide et plus conviviale, en particulier lors de la recherche de grandes bases de code ou de grands fichiers.
Il est écrit en rouille et utilise des technologies efficaces telles que l'automate limité, la SIMD et l'optimisation de texte agressive, ce qui le rend beaucoup plus rapide que de nombreux autres outils de recherche.
ripgrep
fournit également une sortie plus intuitive et colorée par défaut, et il dispose d'un riche ensemble d'options pour personnaliser le comportement de recherche.
Pour rechercher la chaîne "fonction" dans le répertoire actuel:
<code>rg "search_string" .</code>
-i
: Effectuez la recherche insensible à la cas.-I
: ignorer les fichiers binaires.-w
: Recherchez uniquement tout le mot.-n
: Afficher les numéros de ligne correspondants.-C
ou --context
: montre le contexte autour de la ligne correspondante (par exemple, -C3
montre 3 lignes avant et après le match).--color=auto
: mettez en surbrillance le texte correspondant.-H
: affiche le nom de fichier du texte trouvé.-c
: montre le nombre de lignes correspondantes (peut être combinée avec -H
). 1. Recherchez "Erreur" dans le répertoire /var/log/
répertoire insensible:
<code>rg -i "error" /var/log/</code>
2. Recherchez l'ensemble de la "base de données" dans le répertoire /home/user/config
:
<code>rg -w "database" /home/user/config</code>
3. Affichez le numéro de ligne et le contexte environnant de la chaîne "Initialiser" dans le répertoire actuel (avant et après 3 lignes):
<code>rg -n -C3 "initialize" .</code>
4. Recherchez la chaîne "dépréciée" dans tous les fichiers du répertoire /var/www/html
, ignorez le fichier binaire et mettez en surbrillance la correspondance:
<code>rg -I --color=auto "deprecated" /var/www/html</code>
5. Affichez le nombre de lignes correspondantes du nom du fichier et "réussi" dans le répertoire /opt/data
:
<code>rg -H -c "successful" /opt/data</code>
6. Recherchez "user_id", tout en ignorant le fichier binaire et en affichant le nom du fichier dans le répertoire /etc
:
<code>rg -I -H "user_id" /etc</code>
7. Recherchez la chaîne "connexion" et affichez le nom de fichier et le numéro de ligne dans le répertoire /home/user/logs
:
<code>rg -H -n "connection" /home/user/logs</code>
Ces exemples démontrent la polyvalence et la puissance ripgrep
dans une variété de scénarios de recherche, en particulier dans les grands projets et les grands fichiers.
grep
et ripgrep
pour rechercher le texte dans un fichiergrep
pour trouver tous les fichiers dont le contenu contient une chaîne de texte spécifique?
Pour rechercher des chaînes spécifiques dans tous les fichiers d'un répertoire et ses sous-répertoires, utilisez la commande suivante:
<code>grep -Rnw '/path/to/dir/' -e 'pattern'</code>
-R
: Effectuez une recherche récursive, y compris les liens symboliques.-n
: Afficher les numéros de ligne correspondants.-w
: Faites correspondre le mot entier uniquement.-e
: Spécifiez le modèle à rechercher.grep
?
Pour inclure un type de fichier spécifique:
<code>grep --include=\*.{sh,py} -Rnw '/path/to/dir/' -e 'pattern'</code>
Pour exclure des types de fichiers spécifiques:
<code>grep --exclude=\*.tmp -Rnw '/path/to/dir/' -e 'pattern'</code>
grep
?
Pour exclure des répertoires spécifiques:
<code>grep --exclude-dir={node_modules,dist,logs} -Rnw '/path/to/dir/' -e 'pattern'</code>
Utilisez l'option -l
pour afficher uniquement le nom du fichier correspondant:
<code>grep -Rlnw '/path/to/documents/' -e 'confidential'</code>
ripgrep
et pourquoi devrais-je l'utiliser?
ripgrep
( rg
) est une alternative plus rapide et plus efficace au grep
, en particulier dans les grands projets et les grands fichiers. Il est basé sur le moteur d'expression régulière de Rust, qui utilise des automates limités, SIMD et une optimisation de texte agressive pour améliorer la vitesse de recherche.
ripgrep
?
Pour rechercher des chaînes dans tous les fichiers du répertoire actuel, utilisez:
<code>rg "pattern" .</code>
ripgrep
couramment utilisés?
-i
: Effectuez la recherche insensible à la cas.-I
: ignorer les fichiers binaires.-w
: Recherchez uniquement tout le mot.-n
: Afficher les numéros de ligne correspondants.-C
ou --context
: montre le contexte autour de la ligne correspondante (par exemple, -C3
montre 3 lignes avant et après le match).--color=auto
: mettez en surbrillance le texte correspondant.-H
: affiche le nom de fichier du texte trouvé.-c
: montre le nombre de lignes correspondantes (peut être combinée avec -H
).ripgrep
en utilisant différentes options?
/var/logs
insensiblement:
<code>rg -i "session" /var/logs</code>
/etc
:
<code>rg -w "config" /etc</code>
/src
(avant et après 4 lignes):
<code>rg -n -C4 "initialize" /src</code>
/usr/share
, ignorez le binaire et mettez en surbrillance la correspondance:
<code>rg -I --color=auto "deprecated" /usr/share</code>
/opt/logs
:
<code>rg -H -c "success" /opt/logs</code>
/home/user/settings
:
<code>rg -I -H "username" /home/user/settings</code>
/projects
:
<code>rg -H -n "import" /projects</code>
Dans ce didacticiel, nous discutons de la façon d'utiliser grep
et ripgrep
pour rechercher des fichiers contenant des chaînes de texte spécifiques.
Alors que grep
est un outil complet et polyvalent, ripgrep
( rg
) offre des performances améliorées et une expérience utilisateur plus moderne, ce qui en fait un choix populaire pour la recherche de texte, en particulier dans les grands projets ou lorsque vous travaillez avec de grands fichiers.
Lectures connexes :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!