Maison > Tutoriel système > Linux > le corps du texte

Compréhension approfondie de la commande grep : application des expressions régulières dans grep

PHPz
Libérer: 2024-01-13 13:30:21
avant
755 Les gens l'ont consulté
Présentation Comment utiliser les expressions régulières de la commande Grep dans les systèmes Linux et Unix ? Linux est livré avec l'outil de commande GNU grep, qui prend en charge les expressions régulières étendues, et GNU grep est inclus par défaut dans tous les systèmes Linux. La commande Grep est utilisée pour rechercher et localiser toute information stockée sur votre serveur ou poste de travail.
Expressions régulières

L'expression régulière est un modèle utilisé pour faire correspondre chaque ligne d'entrée. Le modèle fait référence à une séquence de caractères. Voici un exemple :

^w1
w1|w2
[^ ]
Copier après la connexion
exemple d'expression régulière grep

Recherchez « vivek » dans le répertoire /etc/passswd

grep vivek /etc/passwd
Copier après la connexion

Exemple de sortie :

vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh
Copier après la connexion

Recherchez vivek dans tous les cas (c'est-à-dire recherche insensible à la casse)

grep -i -w vivek /etc/passwd
Copier après la connexion

Recherchez vivek ou raj dans tous les cas

grep -E -i -w 'vivek|raj' /etc/passwd
Copier après la connexion

Le dernier exemple ci-dessus montre un modèle d'expression régulière étendu.

ancre

Vous pouvez utiliser les symboles ^ et $ pour faire correspondre régulièrement le début ou la fin de la ligne de saisie. L'exemple de recherche suivant affiche uniquement les lignes de saisie commençant par vivek :

grep ^vivek /etc/passwd
Copier après la connexion

Exemple de sortie :

vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
Copier après la connexion

Vous ne pouvez rechercher que des lignes commençant par le mot vivek, c'est-à-dire ne pas afficher vivekgit, vivekg, etc. (traduction LCTT : c'est-à-dire que le mot est suivi de séparateurs de mots anglais tels que des espaces, des symboles, etc.)

grep -w ^vivek /etc/passwd
Copier après la connexion

Trouver les lignes se terminant par le mot mot :

grep 'foo$' 文件名
Copier après la connexion

Correspond uniquement aux lignes contenant foo :

grep '^foo$' 文件名
Copier après la connexion

L'exemple ci-dessous permet de rechercher des lignes vides :

grep '^$' 文件名
Copier après la connexion
Classe de personnage

Match Vivek ou vivek :

grep '[vV]ivek' 文件名
Copier après la connexion

ou

grep '[vV][iI][Vv][Ee][kK]' 文件名
Copier après la connexion

Peut également faire correspondre des nombres (c'est-à-dire correspondre à vivek1 ou Vivek2, etc.) :

grep -w '[vV]ivek[0-9]' 文件名
Copier après la connexion

Peut correspondre à deux caractères numériques (c'est-à-dire foo11, foo12, etc.) :

grep 'foo[0-9][0-9]' 文件名
Copier après la connexion

Non seulement limité aux chiffres, mais aussi correspondant à au moins une lettre :

grep '[A-Za-z]' 文件名
Copier après la connexion

Afficher toutes les lignes contenant des caractères "w" ou "n" :

grep [wn] 文件名
Copier après la connexion

L'expression placée entre parenthèses, c'est-à-dire le nom de la classe de caractères entre "[:" et ":]", représente une liste de tous les caractères appartenant à cette classe. Les noms de classes de caractères standard sont les suivants :

[:alnum:]
Copier après la connexion

- Caractères alphanumériques

[:alpha:]
Copier après la connexion

- Caractères alphabétiques

[:blank:]
Copier après la connexion

- Caractères nuls : espace et tabulation

[:digit:]
Copier après la connexion

-Numéro : '0 1 2 3 4 5 6 7 8 9'

[:lower:]
Copier après la connexion

- Lettres minuscules : 'a b c d e f g h i j k l m n o p q r s t u v w x y z'

[:space:]
Copier après la connexion

- Caractères d'espacement : tabulation, saut de ligne, tabulation verticale, saut de page, retour chariot et caractère espace

[:upper:]
Copier après la connexion

- Lettres majuscules : 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'

Dans cet exemple, toutes les lettres majuscules correspondent :

grep '[:upper:]' 文件名
Copier après la connexion
Carte générique

Vous pouvez utiliser "." pour faire correspondre un seul caractère. L'exemple correspond à des mots de 3 caractères commençant par "b" et se terminant par "t" :

grep '/<b.t/>' 文件名
Copier après la connexion

ici,

Faire correspondre la chaîne vide avant le mot
Correspond à la chaîne vide après le mot

Imprimez toutes les lignes avec seulement deux caractères :

grep '^..$' 文件名
Copier après la connexion

Afficher les lignes commençant par un point et un chiffre :

grep '^/.[0-9]' 文件名
Copier après la connexion
Évasion du personnage Dot

L'expression régulière suivante pour correspondre à l'adresse IP 192.168.1.254 est incorrecte : (traduction LCTT : elle peut correspondre à l'adresse IP, mais il est également possible de faire correspondre des formats similaires où le symbole d'espacement n'est pas un point)

grep '192.168.1.254' /etc/hosts
Copier après la connexion

Les trois caractères points doivent être échappés :

grep '192/.168/.1/.254' /etc/hosts
Copier après la connexion

L'exemple suivant ne peut correspondre qu'aux adresses IP : (traduction LCTT : en fait, en raison de la plage de nombres dans l'adresse IP, cette expression régulière n'est pas exacte)

egrep '[[:digit:]]{1,3}/.[[:digit:]]{1,3}/.[[:digit:]]{1,3}/.[[:digit:]]{1,3}' 文件名
Copier après la connexion
Comment rechercher des modèles correspondants commençant par le symbole "-" ?

Utilisez l'option -e pour rechercher la chaîne correspondant à '--test--'. Si vous n'utilisez pas l'option -e, la commande grep tentera d'analyser '--test--' comme son propre paramètre d'option :

grep -e '--test--' 文件名
Copier après la connexion
Comment utiliser la correspondance « ou » de grep ?

Utilisez la syntaxe suivante :

grep -E 'word1|word2' 文件名
或
egrep 'word1|word2' 文件名
Copier après la connexion

ou

grep 'word1/|word2' 文件名
Copier après la connexion
Comment utiliser la correspondance « et » de grep ?

Utilisez la syntaxe suivante pour afficher toutes les lignes contenant à la fois « mot1 » et « mot2 »

grep 'word1' 文件名 | grep 'word2'
Copier après la connexion
Comment utiliser la détection de séquence ?

En utilisant la syntaxe suivante, vous pouvez détecter le nombre de fois qu'un caractère apparaît de manière répétée dans une séquence :

{N}
{N,}
{min,max}
Copier après la connexion

Pour faire correspondre le caractère "v" apparaissant deux fois :

egrep "v{2}" 文件名
Copier après la connexion

La commande suivante peut correspondre à "col" et "cool" :

egrep 'co{1,2}l' 文件名
Copier après la connexion

La commande suivante fera correspondre toutes les lignes contenant au moins trois caractères « c ».

egrep 'c{3,}' 文件名
Copier après la connexion

L'exemple ci-dessous fera correspondre les numéros de téléphone mobile au format 91-1234567890 (c'est-à-dire deux chiffres - dix chiffres).

grep "[[:digit:]]/{2/}[ -]/?[[:digit:]]/{10/}" 文件名
Copier après la connexion
Comment mettre en surbrillance la commande grep ?

Utilisez la syntaxe suivante :

grep --color 正则表达式 文件名
Copier après la connexion
怎么样仅仅只显示匹配出的字符,而不是匹配出的行?

使用如下语法:

grep -o 正则表达式 文件名
Copier après la connexion
正则表达式限定符
限定符 描述
. 匹配任意的一个字符。
? 匹配前面的子表达式,最多一次。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
{N} 匹配前面的子表达式 N 次。
{N,} 匹配前面的子表达式 N 次到多次。
{N,M} 匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。
- 只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。
^ 匹配一行开始的空字符串;也表示字符不在要匹配的列表中。
$ 匹配一行末尾的空字符串。
\b 匹配一个单词前后的空字符串。
\B 匹配一个单词中间的空字符串。
\< 匹配单词前面的空字符串。
\> 匹配单词后面的空字符串。
grep 和 egrep

egrep 等同于

grep -E
Copier après la connexion

它会以扩展的正则表达式的模式来解释模式。下面来自 grep 的帮助页:

基本的正则表达式元字符 ?、+、 {、 |、 ( 和 ) 已经失去了它们原来的意义,要使用的话用反斜线的版本 /?、/+、/{、/|、/( 和 /) 来代替。 传统的 egrep 并不支持 { 元字符,一些 egrep 的实现是以 /{ 替代的,所以一个可移植的脚本应该避免在 grep -E 使用 { 符号,要匹配字面的 { 应该使用 [}]。

GNU grep -E 试图支持传统的用法,如果 { 出在在无效的间隔规范字符串这前,它就会假定 { 不是特殊字符。

例如,grep -E '{1' 命令搜索包含 {1 两个字符的串,而不会报出正则表达式语法错误。

POSIX.2 标准允许这种操作的扩展,但在可移植脚本文件里应该避免这样使用。

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!

source:linuxprobe.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!