linux中的正则表达式和通配符

一.正则表达式

包括基础正则表达式和扩展正则表达式两种,主要是用于字符串的模式分割,匹配,查找及替换操作。简单地说就是用来匹配文件中符合条件的字符串,是包含匹配。linux中的grep,awk和sed等命令都支持正则表达式。

基础正则表达式的元字符表:

RE字符意义
^b代表行首匹配,查找行首为b的那一行
b$代表行尾匹配,查找行尾为b的那一行
.代表一定有一个任意字符,如b.b可指bab,bab,bdb…等字符串,只要是以b和b开头和结尾的字符串都符合要求
\转义字符,没什么好说的
*重复零个到无穷多个前一个字符,如ee*可以指e,ee,eee,eee…任意字符可以用.*指代
[fgh]代表一个待查找的字符,如l[fgh]tu指代lftu,lgtu和lhtu
[0-9]代表想要选取的字符范围,如grep [0-9] filename 指查找filename中的含有任意数字的所有行
[^list]反向选择,代表查找不含括号中字符的字符串
\{n\}代表连续n个的的前一个字符,此处的\是转义,消除{}的特性,一般与定界符配合使用
\{n,\}代表连续n个以上的前一个字符,一般与定界符配合使用
\{n,m\}连续n到m个的前一个字符,一般与定界符配合使用
举栗子

新建一个名为test.test的文件,内容如下:

I am shanebian.
what do you think about me?
e
ee  
eee
eeee
eeeeee,,,,
bad
bdb
bcb
aeiou
change you mind
you are good
light
lught   
llght
aeeeec
aeec
aeeec

^

匹配行首为you的字符串,并打印行号

grep -n "^you" test.test

结果

10:you are good.

?

匹配行尾为?的字符串,并打印行号

grep -n "?$" test.test

结果

2:what do you think about me?

注意^$代表匹配空白行


.

匹配以b开头和b结尾的字符串,并打印行号

grep -n “b.b” test.test

结果

9:bdb
10:bcd

注意bad那一行字符串没有被打印出来,因为它不是以b结尾。


“*”

匹配包含e的字符串,并打印行号

grep -n "ee*" test.test

结果

1:I am shanebian.
2:what do you think about me?
3:e
4:ee    
5:eee
6:eeee
7:eeeeee,,,,
11:aeiou
12:change you mind
13:you are good.

打印14.15.16行

grep -n "l[iul]ght" test.test

结果

14:light
15:lught
16:llght

[ ]

匹配不含有任何字母的字符串,并打印行号

grep -n “[^a-zA-Z]” test.test

结果

1:I am shanebian.
2:what do you think about me?
7:eeeeee,,,,
12:change you mind #这个被打印出来是因为字符串之间有空格
13:you are good.

\{n\}

匹配e连续出现两次的字符串,并打印行号

grep -n “e\{2\}” test.test

结果

4:ee
5:eee
6:eeee
7:eeeeee,,,,

匹配aeec,并打印行号

grep -n "ae\{2\}c" test.test

结果

18:aeec

匹配aeec和aeeec,并打印行号

grep -n "ae\{2,3\}c" test.test

结果

18:aeec
19:aeeec

扩展阅读:wiki上的正则表达式

二.通配符

主要用来匹配符合条件的文件名,是完全匹配。linux中的ls,find和cp等命令都支持通配符。

符号意义
*代表0个到无穷多个任意字符
?代表一定有一个任意字符
[]代表一定有一个在中括号内的字符
[-]代表在编码顺序内的所有字符,比如[1-9]代表1到9之间的所有数字
[^]代表反向选择,如[^123]代表一定有一个字符,只要是除了1.2.3的其它字符都符合条件

通配符比较简单,没有必要举例子加深理解QAQ

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值