shell正则表达式


目录

  • shell正则表达式
  • 常用匹配
  • 一、什么是正则表达式?
  • 二、元字符
  • 三、基本正则表达式元字符
  • 四、扩展正则表达式元字符


常用匹配

1、匹配数字: 1+$

2、匹配Mail:[a-z0-9_]+@[a-z0-9]+.[a-z]+

3、匹配IP:[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}

egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /etc/sysconfig/network-scripts/ifcfg-ens33

一、什么是正则表达式?

正则表达式 RE,是一种字符模式,用于在查找过程中匹配指定的字符。
在大多数程序里面,正则表达式都被置于两个正斜杠之间,例如/l[oO]ve/就是有正斜杠界定的正则表达式。
它将匹配被查找的行中任何位置出现的相同模式。
在正则表达式中,元字符是最重要的概念

二、元字符

定义:元字符是这样一类字符,他们表达的是不同于字面本身的含义

shell元字符(通配符):由shell解析,如 rm -rf *.pdf ,元字符 *在shell中将其解析为任意多个字符

正则表达式元字符:由各种执行模式匹配操作的程序来解析,比如vim\grep\sed\awk\python

三、基本正则表达式元字符

元字符

功能

示例

^

行首定位符

^love

$

行尾定位符

love$

.

匹配单个字符

l…e

*

匹配前导符0到多次

‘ro*t’

.*

任意多个字符

全部匹配

[ ]

匹配指定范围内的一个字符

[lL]ove

[ - ]

匹配指定范围内的一个字符

[a-z]ove

[ ^ ]

匹配不在指定组内的字符(除了,排除)

[^a-z0-9]ove

\

用来转义元字符

love\.

\<

词首定位符

\<love

\>

词尾定位符

love\>

\(…\)

匹配稍后使用的字符的标签

%s#\(10.18.40\).100#\1.200#


%s#\(192.168.\)10.1#\111.1#


:18 s/\(.*\)/#\1/ 注释第18行

x\{y,z\}

字符x 重复出现y到z次,

o\{1,5\}

x\{y\}

字符x 出现y次

o\{5\}

(…) : %s#(10.18.40).100#\1200
将.100换成.200,\1200:
\1为引用前面第一个括号的内容,替换成200。
\1,\2,\3 分别代表引用前面第1个,第2个,第3个括号的内容,最大支持9组。



四、扩展正则表达式元字符

元字符

功能

示例

+

匹配一个或多个前导字符(最少一次,多不上限)

egrep [a-z]+ove


匹配零个或一个前导字符(最多1次)

egrep r?oot

a | b

匹配a或b

egrep :80 | :22\>

( )

组字符

loveable|rs love(able|rs)

(…)(…)\1\2

标签匹配字符

(love)able\1er

x{m,}

字符x重复m次

0{5}

x{m,n}

字符x重复m次到n次

0{5,10}

x{m}

字符x重复至少m次

0{5,}


  1. 0-9 ↩︎