grep, egrep, 基本正则表达式及扩展表达式;

前端之家收集整理的这篇文章主要介绍了grep, egrep, 基本正则表达式及扩展表达式;前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

什么是正则表达式?

正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序。

正则表达式对Linux系统管理员工作有什么帮助?

通常情况下,由于系统在繁忙的情况下,每天产生的信息会多到你无法想象的地步,系统管理员需要每天去看很多的数据信息,从千百行的数据中找个出一行有问题的信息,难度太大!

这时,我们就可以通过正则表达式的功能,仅仅取出有问题的信息进行分析。如此,系统管理工作将会更加容易;

grepegrep的常用的参数选选项:

选项

功能

备注

-v

反向选取


-o

显示匹配到的内容


-i

匹配时忽略字符大小写


-E

使用扩展正则表达式


-A #

显示匹配到的行后#


-B #

示匹配到的行前#


-C #

显示匹配到的行前后#


--color

表示匹配的字符用颜色标记出来


grep基本正则表达式匹配方式可以细分为几大类:字符匹配、匹配次数、限定、位置锚定、分组符;

@H_147_301@

[^]

@H_205_404@

匹配其前面的字符至少m次,至多n次;

选项

功能

备注

字符匹配

.

匹配任意单个字符

包括字母、数字、特殊字符

[]

匹配指定集合中的任意单个字符

如:[q] 表示匹配字符q

匹配指定集合外的任意单个字符

如:[^q] 表示匹配字符q以外的字符

匹配次数(用于对其前面的紧邻的字符所能够出现的次数做出限定)

*

匹配其前面任意次,01或多次;


\?

匹配其前面的字符0次或一次;


\{m\}

匹配其前面的字符m次;


\{mn\}

另:\{1\}表示1到无穷大都匹配

.*

用于匹配任意长度的任意字符;

此处的.*相当于windows搜索时用到的*

位置锚定:

^

行首锚定(^R 表示R必须出现在行首);

必须写在最左侧;

$

行尾锚定;

写在模式的最右侧;

^$

空白行(行首锚定和行尾锚定组合);

表示行首和行尾都没有任何字符

\<

词首锚定,出现在要查找的单词模式的左侧;

\<q 表示以Q开头的单词;

\>

词尾锚定,出现在要查找的单词模式的右侧;

\>q 表示以Q结尾的单词;

\<pattern\>

匹配单词;

\<root\> 表示查找文件中含有root的行;

分组符:

\(\)

给某特定的值进行分组(不限于单词)

\<root\> 表示查找文件中含有root的行;

实际运用举例:

例:如我们需要寻找在/etc/passwd文件下含有以r开头的行可以用如下命令;

# grep �color '^[r]' /etc/passwd

wKiom1RoeyvwV3c_AADBbR0WZ1g650.jpg

输出结果我们可以看出,grep命令会自动筛选出我们需要的条件行显示出来,隐藏我们不需要的信息;

初学者经常对命令不熟悉经常会闹笑话,比如我们同样寻找/etc/passwd文件下以root开头的行,很多初学者会写成这样: # grep �color '^[root]' /etc/passwd 看似没错.但是显示除的结果却不是我们需要的,下图是这条命令的输出结果:

wKioL1Roe66jeh62AAEnDKPkiBo414.jpg

我们能看到系统显示出了分别以‘r’‘o’‘t’为行首的行;

正确的书写格式如下;

# grep �color '^\(root\)' /etc/passwd

wKiom1Roe0nCDzUoAAByy4BCp8E825.jpg

上图显示出的是我们需求的以‘root’开头的行。

我们也可以加上参数使其至显示我们匹配到的内容

wKioL1Roe8mxh3Q2AABAEr3MFqA926.jpg

我在前的命令后面跟了一个‘-o’的参数,表示仅显示匹配到的内容。同时我们也可以‘-v’进行反向选取,就表示显示除‘root’开头的所有行:

egrep及扩展的正则表达

egrep大部分表达方式与grep一致,仅有部分匹配格式对grep进行了简化,这里仅列出不同的选项;

选项

功能

备注

匹配次数

匹配其前面的字符0次或一次

grep中需要写成:\?

+

匹配其前面的字符至少一次


{m}

匹配其前面的字符m

grep中需要写成:\{m\}

{nm}

匹配其前面的字符至少n次,至多m次;

grep中需要写成:\{n,m\}

分组

xxx

对‘xxx’进行分组

grep中需要写成:\(xxx\)

或者



|

可以进行模糊查找如找abc

‘(a|b|c)’

例:

我们分别使用egrepgrep进行查找/etc/passwd 文件下的出现root的行(要求至少匹配一次),并进行对比;

#grep --color ‘\(root\)\{1,\}’ /etc/passwd

wKiom1Roe2zA364aAACb2b4THtQ527.jpg

#egrep --color ‘(root)+’/etc/passwd

wKioL1Roe-rxc4tuAACUi0G_wMA303.jpg

由上面的两段命令可以看出要显示同样的结果往往egrepgrep的书写方式更简单;

很多时候由于对命令不熟悉,我们经常回记错格式,会把扩展的正则表达式用在grep,我们这里可以尝试一下看会出现什么情况:

wKiom1Roe4ijV03yAABdAuAuCNI979.jpg

这里没有显示任何内容,然后我们使用echo $?查看到反馈为’1’这说明我们的命令没有执行成; 那有没有办法直接用grep来使用扩展正则表达式呢?当然有,我们只需要在命令后面加上-E就可以了;我们来尝试一下;

wKioL1RofAeBENXtAACxAC_Pm-E156.jpg

这里有结果反馈,已经执行成功了!

正则表达式,你明白了吗?

原文链接:https://www.f2er.com/regex/361069.html

猜你在找的正则表达式相关文章