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

关于grep,egrep正则表达式的常用用法

发布时间:2020-12-14 02:05:29 所属栏目:百科 来源:网络整理
导读:正则表达式是一类字符所书写的模式(pattern) 元字符:不表示字符本身的意义,而用于额外功能性的描述;而如果在这些特定的字符前加/这个符号那么这些字符就表示原有的意思。 正则表达式:基本正则表达式和扩展正则表达式 grep [opinions] 'pattern' FILENAME

正则表达式是一类字符所书写的模式(pattern)

元字符:不表示字符本身的意义,而用于额外功能性的描述;而如果在这些特定的字符前加/这个符号那么这些字符就表示原有的意思。



正则表达式:基本正则表达式和扩展正则表达式

grep [opinions] 'pattern' FILENAME

"pattern"和'pattern'单双引号的区别:单双引号就是对变量引用的区别""能引号变量直,''不引用

grep默认支持基本正则表达式

首先先讲解基本正则表达式的pattern的一些常用用法

首先定义alias grep="grep --color=auto"

^:锚定行首的符合条件的内容,用法格式“^pattern”;

例:

[root@localhost ~]# grep "^root" /etc/passwd

root:x:0:0:root:/root:/bin/bash


$: 锚定行尾的符合条件的内容,用法格式“pattern$”;^$: 空白行

.: 匹配任意单个字符,就像通配符里面的?用法

*:匹配紧挨在其前面的字符任意次;这个与通配符里面的*有区别。通配符的*=正则表达式的.*

a*b: ab,aab,acb(整个不匹配,但会显示出来),simkai;color:#ff0000;">b

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

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

[^]:匹配指定范围外的任意单个字符,下面还有个关于grep的选项-v也是取反。但两者是有区别的。

1:[^]后面要接字符 -v可以接空白行(^$),[^]经试验不行要出错

2:[^]接单个字符后,比如有一串字符abcde,[^a]后其仍然要显示,而-v不显示。

[a-z],[A-Z],[0-9]

[:lower:] a-z

[:upper:] A-Z

[:digit:]所有数字

[:alpha:]所有字母

[:alnum:]所有字母和数字

[:space:]

[:punct:]所有符号


grep "r[0-9].*h" /etc/passwd

表示显示以r开头后面紧跟一个数字中间任意长的字符串再以h结尾,值得一提的是如果一个字符串像这样:adr1sdahdfadh它会显示:adr1sdahdfadh而非r1sdahdfadh。这是贪婪模式(尽可能长地去匹配符合模式的内容)

?: 匹配紧挨在其前面的字符0次或1次;

a?b(表示b前面有0或1个a能全部匹配): b,simkai;">{m,n}: 匹配其前面的字符至少m次,至多n次;

{0,n}: 至多n次;0-n次;(n要写个数字)

{m}: 精确匹配m次;

a{1,3}b: b,simkai;color:#ff0000;">aaab,aaagrep "[bB].{2,5}[tT]": Boot,simkai;color:#ff0000;">B123T,simkai;color:#ff0000;">bxy12T

&;: 锚定词首,用法格式:&;pattern

b: bpattern

&;: 锚定词尾,用法格式:pattern&;

b: patternb

&;pattern&;:锚定单词

grep "&;root&;" /etc/passwd

(): 分组,用法格式: (pattern)

(ab){1,3}: abb,simkai;color:#ff0000;">abab,simkai;color:#ff0000;">ababab,

ab任意字符ab:ab.*ab

a.b任意字符a.b: (a.b).*1

grep的选项:

--color=auto

export GREP_COLOR='01;36'

-v: 反向选取,只显示不符合模式的行;

前面已经提到过:grep -v "^$" /etc/rc.d/rc.sysinit 不显示空白行

-o: 只显示被模式匹配到的字串,而不是整个行;

-i: 不区分字符大小写;


-A #:显示匹配到的行时,顺带显示其后面的#个行;

-A 2

-B #:前面的#行;

-C #:前后的#行;


-E: 使用扩展的正则表达式

grep -E = egrep

扩展正则表达式:

.: 任意单个字符

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

a|b: 二选一;

例:egrep "[ab]" = egrep "a|b"

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

*:

+: 匹配其前面的字符至少1次;

?: 0次或一次

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

():分组,支持引用1,2;

&;

&;

^

$


grep -E = egrep


grep "(c|C)at" /root/test.txt

cat,Cat

c,simkai;">
练习:

显示/etc/rc.d/rc.sysinit中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;

[[:space:]],[^[:space:]]


显示/proc/meminfo文件中以不区分大小的s开头的行;

# grep "^[Ss]" /proc/meminfo


显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n;


.n.*.n


显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同;

(.n).*1


显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;

^[[:space:]]{1,}

(编辑:李大同)

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

    推荐文章
      热点阅读