加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

grep正则表达式

发布时间:2020-12-13 22:33:27 所属栏目:百科 来源:网络整理
导读:什么是 grep grep 全名是 Global seach REgular expressionand Print out the line. (全面搜索正则表达式并且显示出来),是一种强大的文本搜索工具,根据用户的文本模式(搜索条件)对目标文件进行逐行搜索,并显示能匹配到(或者不匹配)的行或文本。 既


什么是grep

grep全名是Global seach REgular expressionand Print out the line.(全面搜索正则表达式并且显示出来),是一种强大的文本搜索工具,根据用户的文本模式(搜索条件)对目标文件进行逐行搜索,并显示能匹配到(或者不匹配)的行或文本。

既然grep是全面搜索正则表达式并显示,那正则表达式是什么呢?

正则表达式

正则表达式,(英语:RegularExpression,在代码中常简写为regexregexpRE),是一类字符所书写的模式,其中许多字符不表示字意义,而是表达控制或通配的功能。

正则表达式是由普通的字符和元字符组成,所谓元字符就是不表示其字面意义,而用额外功能性描述。正则表达式的搜索能力是由程序实现的,所以处理正则表达式的工具又称为正则表达式引擎。很多语言都支持正则表式,只是所支持方式略有不同而已。

正则表达式分为基本正则表达式和扩展正则表达式,不同的扩展正表达式支持功能多一点,grep支持基本正则表达式,egrep(grep -E) 支持扩展正则表达式,而fgrep不支持正则表达式。

基本正则表达式(grep

语法格试:

grep[OPTIONS]... PATTERN [FILE...]

基本正则表达式的元字符

1,字符匹配:

.: 匹配任意单个字符

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

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

[0-9],[[:digit:]] : 匹配单个数字

[a-z],[[:lower:]] : 匹配单个小字字母

[A-Z],[[:upper:]] : 匹配单个大字字母

[a-zA-Z],[[:alpha:]] : 匹配单个不区分大小写的字母

[0-9a-zA-Z],[[:alnum:]] : 匹配简个数字或不区分大小写的字母

[[:space:]]: 匹配单个空白字符,包括空格,tab

[[:punct:]]: 匹配单个标点符号

2,次数匹配元字符:用于实现指定其前的字符所能够出现的次数

*:任意长度,它前面的字符可以出现任意次

?0次或1次,它前面的字符是可有可元的

{m}:它前面的字符要现m

{m,n}:它前面出现的字符至少m次,最多n

{m,}:它前面出现的字符至少m

{0,n}:它前面出现的字符最多n

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

+:它前面出现的字符1次以上

3,位置锚定:

^:行首锚定:写在模式最左侧

$:行尾锚定:写在模式最右侧

^$:空白行

&;,b:词首锚定,出现于单词左侧

&;,b:词尾锚定,出现于单词右侧

注意:不包含特殊字符的连续字符组成叫单词

4,分组

(): 比如 (bash)

分组中的模式匹配到内容,可由正则表达式引擎记忆在内存中,之后可以被引用

5,引用

#:引用前面的第#个左括号以及与与其匹配右括号中的模式所匹配到的内容

|:比如,a|b a或者b

扩展正则表达式(egrep

语法格式:

egrep[option]... 'PATTERN' FILE...

grep-E

扩展正则表达式元字符:

1,字符匹配

.:匹配任意单个字符

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

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

2,次数匹配

*:任意长度,它前面的字符可以出现任意次

?0次或1次,它前面的字符是可有可元的

+:它前面出现的字符1次以上

{m}:它前面的字符要现m

{m,n}:它前面出现的字符至少m次,最多n

{m,}:它前面出现的字符至少m

{0,n}:它前面出现的字符最多n

3,位置锚定:

^:行首锚定:写在模式最左侧

$:行尾锚定:写在模式最右侧

^$:空白行

&;,b:词尾锚定,出现于单词右侧

4,分组

():分组

|:或

5,引用:

#:引用前面的第#个左括号以及与与其匹配右括号中的模式所匹配到的内容

grep,egrep 命令选项

-o:仅显示匹配的字串,而非字串所在的行

-v:反向选取

-iignore-case,忽略字符大小写

-A-A #,显示匹配到的行,还要显示匹配到的行下面#

-B-B #,显示匹配到的行,还要显示匹配到的行上面#

-C-C #,显示匹配到的行,还要显示匹配到的行各上下#

--color=auto:匹配到的内容,默认以红色显示

举例:

1,显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户

# grep "/sbin/nologin" -v/etc/passwd | cut -d: -f1

wKiom1UYLdHyXkVcAAC-51bPKdg849.jpg

2,显示/etc/passwd文件中其默认shell/bin/bash的用户,仅显示上述结果中ID号最大的用户

# grep '/bin/bash' /etc/passwd | sort -t:-k3 -n | tail -1 |cut -d: -f1

wKioL1UYL0Lg5zooAACd1MwcMVU857.jpg

3,找出/etc/passwd文件中的一位数或两数

# grep -E --color "&;[0-9]{1,2}&;" /etc/passwd

wKiom1UYLkPh_VxjAAeAD9U5750816.jpg

4,显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后还跟至少一个非空白字符

# grep -E"^#[[:space:]]+[^[:space:]]+" /etc/rc.d/rc.sysinit --color

wKioL1UYL8OQ2tgVAATjNgVwix8817.jpg

5,找出当前系统上其用户名和默认shell相同的用户

# grep -E --color"^(&;[[:alpha:]]+[[:alnum:]]*&;).*1$" /etc/passwd

wKioL1UYMAGgczPxAAFW_BcBPCg302.jpg

6,找出/etc/rc.d/init.d/functions 文件中某单词后跟一组小括号"()"行:

# grep-E --color -o"&;[[:alpha:]]+&;()" /etc/rc.d/init.d/functions

wKiom1UYLvCRo9oVAAFV6QQizxQ362.jpg

7,使用echo 命令输出一个路径,而后使用grep取出其基名

echo "/etc/sysconfig/network" |grep -o -E "[^/]+/?$" | cut -d/ -f1


wKioL1UYMFvxw_wDAACWaaAgycU785.jpg


8,写一个模式,能匹配合理的ipv4地址(1.0.0.1-239.255.255.254

ifconfig | grep -o -E "([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-3][0-9])(.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){2}.([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])"

wKiom1UYL0jCz3ajAAFJ1wGWY_U885.jpg

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读