Shell通配符和正则表达式

目录

​​​​​​​grep

通配符

正则表达式


grep

grep家族有三大成员分别为:

        grep:支持使用基本正则表达式。

        egrep:支持使用扩展正则表达式。

        fgrep:不支持使用正则表达式,即所有的正则表达式中的元字符都将作为一般字符,仅仅

拥有其字面意义,不再拥有特殊意义

 

grep命令的基本语法如下:grep [options] pattern [file…]

[options]选项 作用

-n 

显示行号

-o 

只显示匹配的内容

-q

静默模式,没有任何输出,得用$?来判断执行成功没有,即有没有过滤到想要的内容

-l

如果匹配成功,则只将文件名打印出来,失败则不打印,通常-rl一起用,grep -rl 'root' /etc

-A 

如果匹配成功,则将匹配行及其后n行一起打印出来

-B 

如果匹配成功,则将匹配行及其前n行一起打印出来

-C

如果匹配成功,则将匹配行及其前后n行一起打印出来

--color

高亮颜色显示匹配到的字符串

-c 

如果匹配成功,则将匹配到的行数打印出来

-E 

等于egrep,扩展

-i 

忽略大小写

-v 

取反,不匹配

-w

匹配单词

-r

递归搜索,不仅搜索当前目录,还要搜索其各级子目录

-s

不显示关于不存在或者无法读取文件的错误信息

通配符

通配符 作用
* 匹配任意长度字符,可以是0个
? 匹配任意单个字符,必须是1个
[ ] 匹配指定字符范围内的任意单个字符
[a-z] 表示a-z,A-Y,但不包含Z
[ A-Z ] 表示A,b,B.....z,Z,不包含a
[ a-Z ] 包含所有大小写字母
[ :upper: ] 所有大写字母
[ :lower: ] 所有小写字母
[ :alpha: ] 所有字母
[ :digit: ] 所有数字
[ :blank: ] 水平空白字符
[ :punct: ] 标点符号
[ ^ ] 匹配指定字符范围外的任意单个字符

正则表达式

^

在每行的开始进行匹配

$

在每行的末尾进行匹配

.

对任何单个字符进行匹配

*

对前一项进行0次或多次重复匹配

[str]

对str中的任何单个字符进行匹配

[^str]

对任何不在str中的单个字符进行匹配

[a-b]

对a到b之间的任何字符进行匹配

\

忽略后面一个字符的特殊含义

+

对前一项进行1次或多次重复匹配

对前一项进行0次或1次重复匹配

{j}

对前一项进行j次重复匹配

{j,}

对前一项进行j次或更多次重复匹配

{,k}

对前一项最多进行k次重复匹配

(s|t)

匹配s项或t项中的一项

[[:alnum:]]

匹配任意一个字母或者数字,等价于[A-Za-z0-9]

[[:alpha:]]

匹配任意一个字母,等价于[A-Za-z]

[[:digit:]]

匹配任意一个数字,等价于0-9

[[:lower:]]

匹配任意一个小写字母,等价于a-z

[[:upper:]]

匹配任意一个大写字母,等价于A-Z

[[:space:]]

匹配任意一个空白符,包括空格、制表符、换行符以及分页符

[[:blank:]]

匹配空格和制表符

[[:graph:]]

匹配任意一个看得见的可打印字符,不包括空白字符

[[:print:]]

匹配任何一个可以打印的字符,包括空白字符,但是不包括控制字符、字符串结束符‘\0’、EOF文件结束符(-1)

 [[:cntrl:]]

匹配任何一个控制字符,即ASCII字符集中的前32个字符。例如换行符、 制表符等

[[:punct:]]

匹配任何一个标点符号,例如“[]”、“{}”或者“,”等

[[:xdigit:]]

匹配十六进制数字,即0-9、a-f以及A-F

几个简单的使用例

^word 表示搜索以word开头的内容

Shell通配符和正则表达式_第1张图片

 word$ 表示搜索以word结尾的内容

Shell通配符和正则表达式_第2张图片

 . 代表且只能代表一个任意字符

Shell通配符和正则表达式_第3张图片

 * 重复0个或多个前面的字符

Shell通配符和正则表达式_第4张图片

 

[] 匹配字符集合内任意一个字符,如[a-z]

Shell通配符和正则表达式_第5张图片

 

[^abc]在中括号里表示非,不包含a或b或c

 

找出"fdisk -l“命令的结果中,取出硬盘路径

fdisk -l | grep Disk | grep /dev/nv | cut -d: -f 1 | cut -d " " -f2

 

 

找出ifconfig命令输出中的所有IP地址

ifconfig | egrep -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9] {1,3}\.[0-9]{1,3}"

你可能感兴趣的:(Shell,linux,正则表达式,shell)