Maison  >  Article  >  interface Web  >  Explication détaillée de l'utilisation des regex et des trois principaux outils de traitement de texte de Linux

Explication détaillée de l'utilisation des regex et des trois principaux outils de traitement de texte de Linux

php中世界最好的语言
php中世界最好的语言original
2018-03-29 13:58:191346parcourir

Cette fois, je vais vous apporter une explication détaillée de l'utilisation des trois principaux outils de traitement de texte d'expression régulière et Linux. Quelles sont les précautions lors de l'utilisation des trois principaux outils de traitement de texte d'expression régulière et. Linux Ce qui suit est un cas pratique, jetons-y un coup d'œil une fois.

grep, sed et awk sont tous des outils de traitement de texte. Bien qu'ils soient tous des outils de traitement de texte, ils ont tous leurs propres avantages et inconvénients. Une commande de traitement de texte ne peut pas être complètement remplacée par une autre, sinon elle ne le sera pas. des commandes de traitement de texte apparaissent.

1. Expression régulière

1. Type de caractères correspondants

[a-z] : Lettres minuscules

[A-Z] : Lettres majuscules

[a-Z] : Lettres minuscules ou majuscules

[0-9] : Chiffres

[a-zA-Z0-9] : Correspond à un caractère qui est une lettre ou un chiffre

: Correspond à n'importe quel caractère, à l'exception des espaces

[0-f] : Nombre hexadécimal.

abc | def : abc ou def
a (bc | de) f : abcf ou adef

< : Le premier mot d'un mot est généralement précédé d'un espace ou Les caractères spéciaux sont utilisés comme séparateurs, et les chaînes continues sont traitées comme des mots

> : terminaisons de mots

[^expression] : sauf les lettres minuscules tous les personnages, et ainsi de suite.

2. Suivi des symboles suivants pour contrôler le nombre de correspondances

Le côté gauche de ces symboles doit avoir l'expression du premier point ci-dessus

expression * : 0 ou n caractères

expression + : 1 ou n caractères

expression ? : 0 ou 1 caractère

expression {n} : n caractères

expression {n:m} : n à m caractères

expression {n,} : au moins n caractères

[Exemple] [a-z] * signifie correspondre à 0 ou plus en minuscules lettres

3. Contrôlez les caractères correspondants à la tête et à la queue
^ expression : la tête correspond à

expression $ : la queue correspond à

2. Trois principaux outils de traitement de texte sous Linux

1. Outil de filtrage egrep

Extension de la version grep, vous pouvez utiliser des expressions régulières

🎜>

Syntaxe :

egrep -option 'Expression régulière' Nom du fichier

Options :

-n : afficher le numéro des lignes
-o : uniquement afficher le contenu correspondant
-q : Mode silencieux, pas de sortie, vous devez utiliser $? pour déterminer si l'exécution est réussie, c'est-à-dire si le contenu souhaité est filtré
-l : ​​Si la correspondance est réussie, seul le nom du fichier sera imprimé. S'il échoue, il ne sera pas imprimé. Habituellement, -rl est utilisé ensemble grep -rl 'root' /etc
-A : Si la correspondance est réussie, la ligne correspondante et le. Les n lignes suivantes seront imprimées ensemble
-B : Si la correspondance est réussie, imprimez ensemble la ligne correspondante et les n lignes avant et après.
-C : Si la correspondance est réussie, imprimez la correspondance. ligne et les n lignes avant et après ensemble
--color
-c : Si la correspondance est réussie, imprimez le nombre de lignes correspondantes
-i : Ignorer la casse

-v : Nier , ne correspondent pas à

-w : Mots de correspondance 2. sed streamÉditeur

Syntaxe :

Syntaxe 1 : sed - option 'positionnement numérique + commande' Nom du fichier

options :

-n : mode silencieux, pas de sortie
-e : modifications multiples, ce n'est pas très clair
-i : modifier directement le contenu du fichier, et non en sortie

-r : mode étendu, vous pouvez utiliser des expressions régulières

-f : spécifier le nom du fichier et écrire l'action dans un nouveau fichier

Commande :

a ∶ Ajouter,
c ∶ Modifier,
d ∶ Supprimer,
i ∶ Insérer, je peux être suivi par des chaînes, et ces chaînes apparaîtront dans un nouveau line (la ligne précédente actuelle)

p∶ print print

s∶ au lieu de remplacer, vous pouvez effectuer directement le travail de remplacement. Habituellement, cette action peut être associée à une expression régulière. Par exemple, 1,20s/old/new/g

*s instructions spéciales de commande :

Utilisez {Command 1 : Command 2 : Command 3} pour ajouter plusieurs commandes

语法2:sed  -r  '替换命令s/正则表达式/替换内容/贪婪选项g'  文件名

定位的两种方法:

①数字定位(输入行序号定位)

十进制数
1:单行
1,3:范围 从第一行到第三行
2,+4:匹配行后若干行
4,~3:从第四行到下一个3的倍数行
2~3:第二行起每间隔三行的行
$:尾行
1!:除了第一行以外的行

【例】sed -n '1p' /etc/passwd

②正则表达式定位

正则必须用//包裹起来

扩展正则需要用 -r 参数或转义

替换可使用正则表达式的子模式,即小括号(),可以\1、\2代表子模式

【例】sed -r 's/(.)(.)/\2\1/ file1 表示将匹配到的第一部分和第二部分替换

*贪婪选项:填上g,代表把一行中所有匹配项替换

3、awk 文本分析工具

由命令、正则(需要用//包围起来)、比较和关系运算组合而成

使用option中的-F参数定义间隔符号

用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域,NF变量表示当前记录的字段数

语法

awk -选项 参数  '逻辑判断{命令 变量1,变量2,变量3}' 文件名

选项

-F 定义字段分隔符,默认的分隔符是连续的空格或制表符
-v 定义变量并赋值 也可以借用次方式从shell变量中引入

AWK变量

NR 当前记录的个数(全部文件连接后的统计)
FNR 当前记录的个数(仅为当前文件的统计,非全部)
FS 字段分隔符 默认为连续空格或制表符,可以使用多个不同的符号做分隔符 -F[:/]
OFS 输出字符的分隔符 默认是空格
# awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd
root=====x
NF 当前读入行的字段个数
ORS 输出记录分隔符 默认是换行
# awk -F: 'ORS="=====" {print $1,$2}' /etc/passwd
root x=====bin x=====
FILENAME 当前文件名

【例1】使用AWK变量

# awk '{print NR,FNR,$1}' file1 file2 
1 1 aaaaa
2 2 bbbbb
3 3 ccccc
4 1 dddddd
5 2 eeeeee
6 3 ffffff
#

【例2】引用shell变量的方法

# a=root
# awk -v var=$a -F: '$1 == var {print $0}' /etc/passwd
或者 把整个命令拆开传递,让shell变量外露,
# awk -F: '$1 == "'$a'" {print $0}' /etc/passwd
# a=NF
# awk -F: '{print $'$a'}' /etc/passwd

逻辑运算(可直接引用域进行运算)

= += -= /= *= 赋值

&& || ! 逻辑与 逻辑或 逻辑非

~ !~  匹配正则或不匹配,正则需要用 /正则/ 包围住
< <= > >= != ==  关系 比较字符串时要把字符串用双引号引起来

$ 字段引用:字段引用需要加$,而变量引用直接用变量名

+ - * / % ++ --  运算符

转义序列

\\ \自身
\$ 转义$
\t 制表符
\b 退格符
\r 回车符
\n 换行符
\c 取消换行

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

Linux grep与正则表达式的使用

怎么用正则把字符串分组

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!

Déclaration:
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