Linux之正则表达式

1,常用正则表达式

元字符

功能

.

匹配除了换行符以外的任意单个字符

*

前导字符出现0次或连续多次

.*

任意长度字符

^

行首(以…开头)

$

行尾(以…结尾)

^$

空行

[]

匹配括号里任意单个字符或一组单个字符

[^]

匹配不包含括号里任一单个字符或一组单个字符

1

匹配以括号里任意单个字符或一组单个字符开头

[]

匹配不以括号里任意单个字符或一组单个字符开头

2,扩展正则表达式

元字符

功能

备注

<

取单词的头


>

取单词的尾


< >

精确匹配


{n}

匹配前导字符连续出现n次


{n,}

匹配前导字符至少出现n次


{n,m}

匹配前导字符出现n次与m次之间


( )

保存被匹配的字符


\d

匹配数字(grep -P

[0-9]

\w

匹配字母数字下划线(grep -P

[a-zA-Z0-9_]

\s

匹配空格、制表符、换页符(grep -P

[ \r ]

扩展类正则表达式使用方法:

grep你要用我,必须加 -E 或者 让你兄弟egrep来找我sed你要用我,必须加 -r

扩展元字符

功能

备注

+

匹配一个或多个前导字符

bo+ 匹配boo、 bo

?

匹配零个或一个前导字符

bo? 匹配b、 bo

|

匹配a或b

()

组字符(看成整体)

(my|your)self:表示匹配myself或匹配yourself

{n}

前导字符重复n次


{n,}

前导字符重复至少n次


{n,m}

前导字符重复n到m次


# grep "root|ftp|adm" /etc/passwd
# egrep "root|ftp|adm" /etc/passwd
# grep -E "root|ftp|adm" /etc/passwd

# grep -E 'o+gle' test.txt
# grep -E 'o?gle' test.txt

# egrep 'go{2,}' 1.txt
# egrep '(my|your)self' 1.txt


使用正则过滤出文件中的IP地址:
# grep '[0-9]\{2\}\.[0-9]\{1\}\.[0-9]\{1\}\.[0-9]\{1\}' 1.txt
10.1.1.1
# grep '[0-9]{2}\.[0-9]{1}\.[0-9]{1}\.[0-9]{1}' 1.txt
# grep -E '[0-9]{2}\.[0-9]{1}\.[0-9]{1}\.[0-9]{1}' 1.txt
10.1.1.1
# grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' 1.txt
10.1.1.1
# grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' 1.txt
10.1.1.1
123456789101112131415161718192021

特殊类正则表达式

表达式

功能

示例

[:alnum:]

字母与数字字符

[[:alnum:]]+

[:alpha:]

字母字符(包括大小写字母)

[[:alpha:]]{4}

[:blank:]

空格与制表符

[[:blank:]]*

[:digit:]

数字

[[:digit:]]?

[:lower:]

小写字母

[[:lower:]]{4,}

[:upper:]

大写字母

[[:upper:]]+

[:punct:]

标点符号

[[:punct:]]

[:space:]

包括换行符,回车等在内的所有空白

[[:space:]]+

# grep -E '^[[:digit:]]+' 1.txt
# grep -E '^[^[:digit:]]+' 1.txt
# grep -E '[[:lower:]]{4,}' 1.txt
123

总结:

元字符:在正则中,具有特殊意义的专用字符,如: 星号(*)、加号(+)等
前导字符:元字符前面的字符叫前导字符

元字符

功能

示例

*

前导字符出现0次或者连续多次

ab* abbbb

.

除了换行符以外,任意单个字符

ab. ab8 abu

.*

任意长度的字符

ab.* adfdfdf

[]

括号里的任意单个字符或一组单个字符

[abc] [0-9] [a-z]

[^]

不匹配括号里的任意单个字符或一组单个字符

[^abc]

2

匹配以括号里的任意单个字符开头

3

^[^]

不匹配以括号里的任意单个字符开头


^

行的开头

^root

$

行的结尾

bash$

^$

空行


{n}和{n}

前导字符连续出现n次

[0-9]{3}

{n,}和{n,}

前导字符至少出现n次

[a-z]{4,}

{n,m}和{n,m}

前导字符连续出现n-m次

go{2,4}

<>

精确匹配单词

()

保留匹配到的字符

(hello)

+

前导字符出现1次或者多次

[0-9]+

?

前导字符出现0次或者1次

go?

|

^root|^ftp

()

组字符

(hello|world)123

\d

perl内置正则

grep -P \d+

\w

匹配字母数字下划线


示例:
1、查找不以大写字母开头的行(三种写法)。
grep '^[^A-Z]' 2.txt
grep -v '^[A-Z]' 2.txt
grep '^[^[:upper:]]' 2.txt
2、查找有数字的行(两种写法)
grep '[0-9]' 2.txt
grep -P '\d' 2.txt
3、查找一个数字和一个字母连起来的
grep -E '[0-9][a-zA-Z]|[a-zA-Z][0-9]' 2.txt
4、查找不以r开头的行
grep -v '^r' 2.txt
grep '^[^r]' 2.txt
5、查找以数字开头的
grep '^[0-9]' 2.txt
6、查找以大写字母开头的
grep '^[A-Z]' 2.txt
7、查找以小写字母开头的
grep '^[a-z]' 2.txt
8、查找以点结束的
grep '\.#39; 2.txt
9、去掉空行
grep -v '^#39; 2.txt
10、查找完全匹配abc的行
grep '\
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章