linux 正则表达式

正则表达式

  正则表达式模式利用通配符来描述数据流中的一个或多个字符。Linux中有很多场景都可以使用通配符来描述不确定的数据。

正则表达式的类型

  POSIX基础正则表达式(basic regular expression,BRE)引擎
  POSIX扩展正则表达式(extended regular expression,ERE)引擎
 基础正则表达式与扩展正则表达式
符号 描述 示例
. 匹配除换行符(\n)之外的任意单个字符

匹配 123:

[root@localhost ~]# echo -e "123\n456" |grep '1.3'
123

^ 匹配后面字符串开头

匹配以 abc 开头的行:

[root@localhost ~]# echo -e "abc\nxyz" |grep ^abc
abc

$ 匹配前面字符串结尾

匹配以 xyz 结尾的行:

[root@localhost ~]# echo -e "abc\nxyz" |grep xyz$
xyz

* 匹配前一个字符零个或多个

匹配 x、xo 和 xoo:

[root@localhost ~]# echo -e "x\nxo\nxoo\no\noo" |grep "xo*"
x
xo
xoo

x 是必须的,批量了 o 零个或多个

+ 匹配前面字符 1 个或多个

匹配 abc 和 abcc:

[root@localhost ~]# echo -e "abc\nabcc\nadd" |grep -E 'ab+'
abc
abcc
匹配单个数字:

[root@localhost ~]# echo "113" |grep -o '[0-9]'
1
1
3
连续匹配多个数字:
[root@localhost ~]# echo "113" |grep -E -o '[0-9]+'
113

? 匹配前面字符 0 个或 1 个

匹配 ac 或 abc:

[root@localhost ~]# echo -e "ac\nabc\nadd" |grep -E 'a?c'
ac
abc

[ ] 匹配中括号之中的任意一个字符

匹配 a 或 c:

[root@localhost ~]# echo -e "a\nb\nc" |grep '[ac]'
a
c

[ .-.] 匹配中括号中范围内的任意一个字符

匹配所有字母:

[root@localhost ~]# echo -e "a\nb\nc" |grep '[a-z]'
a
b
c

[^] 匹配[^字符]之外的任意一个字符

匹配 a 或 b:

[root@localhost ~]# echo -e "a\nb\nc" |grep '[^c-z]'
a
b

匹配末尾数字:

[root@localhost ~]# echo "abc:cde;123" |grep -E '[^;]+$'
abc:cde;123

^[^]  匹配不是中括号内任意一个字符开头的行

匹配不是#开头的行:

示例:

grep '^[^#]' /etc/httpd/conf/httpd.conf

 {n}或{n,}  匹配花括号前面字符至少 n个字符

 匹配 abc 字符串(至少三个字符以上字符串):

[root@localhost ~]# echo -e "a\nabc\nc" |grep -E '[a-z]{3}'
abc

 {n,m}  匹配花括号前面字符至少 n个字符,最多 m 个字符

 匹配 12 和 123(不加边界符会匹配单个字符):

[root@localhost ~]# echo -e "1\n12\n123\n1234" |grep -E -w -o '[0-9]{2,3}'
12
123

 \<  边界符,匹配字符串开始

 匹配开始是 123 和 1234

[root@localhost ~]# echo -e "1\n12\n123\n1234" |grep '\<123'
123
1234

 \>  边界符,匹配字符串结束

 匹配结束是 1234:

[root@localhost ~]# echo -e "1\n12\n123\n1234" |grep '4\>'
1234

 ()

单元或组合:将小括号里面作为一个组合

分组:匹配小括号中正则表达式或字符。\n 反向引
用,n 是数字,从 1 开始编号,表示引用第n个分组匹配

的内容

单元:匹配 a123a 字符串

[root@localhost ~]# echo 'a123abc' | grep  -E -o '([0-9a-z]){4}'
a123

分组:匹配 11

[root@localhost ~]# echo "113abc" |grep -E -o '(1)\1'
11

匹配出现 xo 出现零次或多次:

[root@localhost ~]# echo -e 'x\nxo\nxoo\no\noo' | grep -E "(xo)*"
x
xo
xoo
o
oo

 |
匹配竖杠两边的任意一个

 匹配 12 和 123:

 [root@localhost ~]# echo -e "1\n12\n123\n1234" |grep -E '12\>|123\>'
12
123

 \  转义符,将特殊符号转成原  有意义 1.2,匹配 1.2:1\.2,否则 112 也会匹配到
 
posix字符 描述
[:alnum:] 等效[a-zA-Z0-9]
[:alpha:] 等效[a-zA-Z]
[:lower:] 等效[a-z]
[:upper:] 等效[A-Z]
[:digit:] 等效[0-9]
[:space:] 匹配任意空白字符,等效[\t\n\r\f\v]
[:graph:] 非空白字符
[:blank:] 空格与定位字符
[:cntrl:] 控制字符
[:print:] 可显示的字符
[:punct:] 标点符号字符
[:xdigit:] 十六进制

 

posted @ 2021-07-15 15:12  西红柿要上天  阅读(144)  评论(0)    收藏  举报