grep及正则表达式详解

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

grep正则表达式

一、grep

1grep定义

GloballysearchaRegularExpressionandPrint

全局搜索(匹配正则表达式的)并打印

扩展命令:

egrep:扩展grep,相当于grep-E命令,使用扩展正则匹配。

fgrepfastgrep不支持正则匹配的grep,只能匹配字符本来的意义。

grepegrep的区别是egrep支持更多扩展的正则

2grep参数(#代表数字)

-v显示不匹配的行

-i:忽略字母大小写

-o:只打印匹配的字符

-E:扩展正则表达式

-A#显示匹配的行以及匹配行后的#

-B#显示匹配的行以及匹配行前的#

-C#显示匹配的行以及匹配行前后的各#

--color:定义匹配字符的颜色

颜色标记匹配的字符配置:

aliasgrep='grep--color=auto'

aliasegrep='egrep--color=auto'

永久生效修改文件/etc/bashrc添加上面两行内容

3、各个参数举例:

wKiom1XgMjzBZg8pAAFFX3cHFqs869.jpg

二、正则表达式

1、字符匹配

.:匹配一个字符

[]:匹配范围内任意单个字符

[^]:匹配范围外任意单个字符

例:

原始文件

wKiom1XgMm_RD6VEAACAk2A_A0s750.jpg

.:匹配任意一个字符

wKioL1XgNNTw2n-dAAA2XvX31WU219.jpg

[]:匹配ab两个字符

wKiom1XgMsiQl8vBAABo4Gqcf_c946.jpg

[^]:匹配除了abc三个以外的任意字符

wKioL1XgNPGSdYQNAAB8hOPFAcE190.jpg

扩展

[0-9][[:digit:]]匹配数字

[a-z][[:lower:]]匹配小写字母

[A-Z][[:upper:]]匹配大写字母

[[:space:]]匹配所有空白字符(空格,制表符,新行)

[0-9a-zA-Z][[:alnum:]]匹配字母及数字

[a-zA-Z][[:alpha:]]匹配字母

[[:punct:]]标点符号

2次数匹配

*:任意次数

.*:任意长度的任意字符

\?0次或1

\+1次或多次

\{m\}m

\{m,n\}:至少m次,至多n

\{0,n\}:至多n

\{m,\}:至少m

例:

*:匹配l任意次数

wKiom1XgMujw9ublAACEEgVlopw445.jpg

.*:匹配h开头的任意行

wKioL1XgNRSS9Tx6AAA2Mg54Aqc699.jpg

\?:匹配el字符,l可以是0次或1

wKiom1XgMxDws6X5AABqdTzJWkk064.jpg

\+:匹配ell最少1

wKiom1XgMySSZR3tAABTTEhH9Sw444.jpg

\{m\}:匹配ell字符

wKiom1XgMzXQZXWmAAA5RFfmvz4107.jpg

\{m,n\}:匹配ell最少1次,最多2

wKioL1XgNWHAC-abAABWGHVAJVE069.jpg

\{0,n\}:匹配ell最多2次,

wKiom1XgM1uzMWYMAABp2WvJYv8981.jpg

\{m,\}:匹配ell最少1

wKioL1XgNYaxps0IAABVCeC9FAE024.jpg

3、定位匹配

^:匹配行首

$:匹配行尾

\<\b:匹配单词词首

\>\b:匹配单词词尾

例:

^:匹配以h开头的行

wKiom1XgM4DRhmcpAAA5zQ1caLo408.jpg

$:匹配以d结尾的行

wKiom1XgM5uArYW6AAAz5mxrgrc753.jpg

\<:匹配以h开头的单词

wKioL1XgNcPB6F1aAAA3Fx39Eyk321.jpg

\>:匹配以o结尾的单词

wKioL1XgNeCBZJTqAABRQu3ntmc226.jpg

\<\>:匹配单词hello

wKioL1XgNe_wlVafAABArQusfCQ667.jpg

4、分组和引用

\(\):小括号内的为一组

\1,\2,……引用分组,1为第一个小括号内容2为第二个小括号内容……

例:匹配以4个字符开头并且与开头相同4个字符结尾的行

wKiom1XgM-Hye5UrAAB6Nzb6qNA755.jpg

5元字符总结:

正则表达式及grep

字符匹配:.[][^]

次数匹配:*\+\?\{\}

定位匹配:^$\<\>

分组和后向引用:\(\)\1,\2……

扩展正则表达式及egrep

字符匹配:.[][^]

次数匹配:*+?{}

定位匹配:^$\<\>

分组和后向引用:()\1,\2……

或者:a|b


扩展正则表达式举例(为省事和上面的例子顺序相同,只截了3个图)

wKioL1XgOreTzhEaAAH0qzB-9Kk716.jpg

wKiom1XgOJyTwrY3AAJ94JdKz44183.jpg

|:匹配w或W的行

wKioL1XgOuKysDKVAABmZ8apYqs265.jpg


三、作业

1显示/etc/passwd文件中以bash结尾的行

wKiom1XgVnvwcRNoAACKC82PYOs230.jpg

2显示/etc/passwd文件中的两位数或三位数

wKioL1XgWOigcr-hAAJCvTn6cpw644.jpg

3、显示`netstat-tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行

wKiom1XgVu3ys_dVAACy9lDOzC8377.jpg

4添加用户bashtestbashbasher以及nologin用户nologin用户shell/sbin/nologin);而后找出/etc/passwd文件用户名与其shell名相同的行

wKioL1XgWSqzJcfLAAGnffNF5n8911.jpg

5、显示当前系统上rootcentos或者user1用户的默认shellUID(请事先创建这些用户,若不存在)

wKioL1XgWVLjjUzjAAB0Dj7Drf8969.jpg

6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行

wKiom1XgXyjyg7GMAAGuSM9kRc4330.jpg

7使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其完整路径和目录名

目录名:

#echo/etc/rc.d/init.d/functions|grep-o'/.*/'|grep-o'\<[a-zA-Z.]\+\>/$'|grep-o'[a-zA-Z.]\+'

wKioL1XiYEbwQXODAAEGiUuGzMA063.jpg

8找出ifconfig命令执行结果中1-255之间的数字

#ifconfig|egrep'\<[1-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>'

合并相同的[]为[]{},合并后简写结果

#ifconfig|egrep'\<[1-9]\>|\<[1-9][0-9]\>|\<1[0-9]{2}\>|\<2[0-4][0-9]\>|\<25[0-5]\>'

省略多余的\<\>,合并简写结果

#ifconfig|egrep'\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>'

wKiom1XgXxOAB-1cAAGmVLZrje0129.jpg

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

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