Commande grep Linux
Encyclopédie des commandes Linux
La commande Linux grep (expression régulière globale) est utilisée pour rechercher des chaînes ou des expressions régulières correspondant aux critères dans les fichiers.
La commande grep est utilisée pour rechercher des fichiers dont le contenu contient un motif spécifié. Si le contenu d'un fichier correspond au motif spécifié, par défaut la commande grep affichera la ligne contenant ce motif. Si aucun nom de fichier n'est spécifié, ou si le nom de fichier donné est-, alors la commande grep lira les données depuis le périphérique d'entrée standard.
Syntaxe
grep [options] pattern [files] ou grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
- pattern - Indique la chaîne ou l'expression régulière à rechercher.
- files - Indique les noms de fichiers à rechercher ; plusieurs fichiers peuvent être recherchés en même temps. Si le paramètre files est omis, les données sont lues depuis l'entrée standard par défaut.
Options courantes ::
-i: Ignorer la casse lors de la correspondance.-v: Recherche inversée, afficher uniquement les lignes qui ne correspondent pas.-n: Afficher les numéros de ligne des lignes correspondantes.-r: Rechercher récursivement des fichiers dans les sous-répertoires.-l: Afficher uniquement les noms des fichiers correspondants.-c: Afficher uniquement le nombre de lignes correspondantes.
Plus de descriptions de paramètres:
- -a ou --text: Ne pas ignorer les données binaires.
- -A<nombre de lignes à afficher> ou --after-context=<nombre de lignes à afficher>: En plus d'afficher la ligne qui correspond au motif, afficher aussi le contenu après cette ligne.
- -b ou --byte-offset: Avant d'afficher la ligne qui correspond au motif, indiquer le numéro du premier caractère de cette ligne.
- -B<nombre de lignes à afficher> ou --before-context=<nombre de lignes à afficher>: En plus d'afficher la ligne qui correspond au motif, afficher aussi le contenu avant cette ligne.
- -c ou --count: Compter le nombre de lignes qui correspondent au motif.
- -C<nombre de lignes à afficher> ou --context=<nombre de lignes à afficher> ou -<nombre de lignes à afficher>: En plus d'afficher la ligne qui correspond au motif, afficher aussi le contenu avant et après cette ligne.
- -d <action> ou --directories=<action>: Lorsque la cible spécifiée à rechercher est un répertoire plutôt qu'un fichier, ce paramètre doit être utilisé ; sinon, la commande grep signalera un message et s'arrêtera.
- -e<pattern> ou --regexp=<pattern>: Spécifiez une chaîne comme motif pour rechercher dans le contenu des fichiers.
- -E ou --extended-regexp: Traitez le motif comme une expression régulière étendue.
- -f<rule file> ou --file=<rule file>: Spécifiez un fichier de règles dont le contenu contient un ou plusieurs motifs de règles, permettant à grep de rechercher dans le contenu des fichiers qui répondent aux critères de la règle. Le format est un motif de règle par ligne.
- -F ou --fixed-regexp: Traitez le motif comme une liste de chaînes fixes.
- -G ou --basic-regexp: Traitez le motif comme une expression régulière ordinaire.
- -h ou --no-filename: Avant d'afficher la ligne qui correspond au motif, n'indiquez pas le nom du fichier auquel appartient la ligne.
- -H ou --with-filename: Avant d'afficher la ligne qui correspond au motif, indiquez le nom du fichier auquel appartient la ligne.
- -i ou --ignore-case: Ignorez les différences de casse des caractères.
- -l ou --file-with-matches: Listez les noms des fichiers dont le contenu correspond au motif spécifié.
- -L ou --files-without-match: Listez les noms des fichiers dont le contenu ne correspond pas au motif spécifié.
- -n ou --line-number: Avant d'afficher la ligne qui correspond au motif, indiquez le numéro de ligne de cette ligne.
- -o ou --only-matching: Afficher uniquement la partie qui correspond à PATTERN.
- -q ou --quiet ou --silent: N'afficher aucune information.
- -r ou --recursive: Ce paramètre a le même effet que le fait de spécifier le paramètre "-d recurse".
- -s ou --no-messages: N'afficher aucun message d'erreur.
- -v ou --invert-match: Afficher toutes les lignes qui ne contiennent pas le texte correspondant.
- -V ou --version: Afficher les informations de version.
- -w ou --word-regexp: Afficher uniquement les lignes qui correspondent à des mots entiers.
- -x --line-regexp: Afficher uniquement les lignes qui correspondent à la ligne entière.
- -y : Ce paramètre a le même effet que le fait de spécifier le paramètre "-i".
Encyclopédie des commandes Linux
Exemples
1. Rechercher la chaîne "hello" dans le fichier file.txt et afficher les lignes correspondantes :
grep hello file.txt
2. Rechercher récursivement dans tous les fichiers du répertoire dir les lignes correspondant à l'expression régulière "pattern", et afficher les noms de fichiers et les numéros de ligne des lignes correspondantes :
grep -r -n pattern dir/
3. Rechercher la chaîne "world" dans l'entrée standard, et afficher uniquement le nombre de lignes correspondantes :
echo "hello world" | grep -c world
4. Dans le répertoire courant, recherchez parmi les fichiers dont le nom a pour suffixe "file" ceux qui contiennent la chaîne "test", et affichez les lignes contenant cette chaîne. Dans ce cas, vous pouvez utiliser la commande suivante :
grep test *file
Le résultat est le suivant :
$ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件 testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行 testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行 testfile_2:Linux test #列出testfile_2 文件中包含test字符的行
5. Recherchez récursivement les fichiers qui répondent aux critères. Par exemple, pour trouver, dans tous les fichiers sous le répertoire spécifié /etc/acpi et ses sous-répertoires (s'il y en a), ceux qui contiennent la chaîne "update", et afficher le contenu des lignes contenant cette chaîne, utilisez la commande suivante :
grep -r update /etc/acpi
Le résultat de sortie est le suivant :
$ grep -r update /etc/acpi #以递归的方式查找“etc/acpi” #下包含“update”的文件 /etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.) Rather than /etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.) Rather than /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update
6. Recherche inversée. Les exemples précédents recherchent et affichent les lignes qui répondent aux critères. L'utilisation du paramètre "-v" permet d'afficher le contenu des lignes qui ne répondent pas aux critères.
Pour trouver les lignes qui ne contiennent pas "test" dans les fichiers dont le nom contient "test", utilisez la commande suivante :
grep -v test *test*
Le résultat est le suivant :
$ grep-v test* #查找文件名中包含test 的文件中不包含test 的行 testfile1:helLinux! testfile1:Linis a free Unix-type operating system. testfile1:Lin testfile_1:HELLO LINUX! testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM. testfile_1:THIS IS A LINUX TESTFILE! testfile_2:HELLO LINUX! testfile_2:Linux is a free unix-type opterating system.Autres extensions