Linux 正则表达式

一、基础知识

匹配操作符

  • \                                   转义字符
  • .                                   匹配任意单个字符
  • [1249a],[^12],[a-k]     字符序列单字符占位
  • ^                                   行首
  • $                                   行尾
  • \<,\>:\<abc                 单词首尾边界
  • |                                    连接操作符
  • (,)                                 选择操作符
  • \n                                  反向引用

重复操作符:

  • ?          匹配0到1次。
  • *          匹配0到多次。
  • +         匹配1到多次。
  • {n}       匹配n次。
  • {n,}      匹配n到多次。
  • {n,m}   匹配n到m次。

与扩展正则表达式的区别:grep basic

  • \?, \+, \{, \}, \|, \(, and \)

匹配任意字符

  • .*

二、测试数据1

vim data.txt
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx
$ooxx
oo1234xx
ooxyzxx

1、包含"ooxx"的行

[root@server2 data]# grep "ooxx" data.txt 
ooxx12121212ooxx
ooxx 12121212
1212 ooxx 1212
$ooxx

2、包含数字的行

[root@server2 data]# grep "[0-9]" data.txt 
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo3xx
oo4xx
oo1234xx

3、包含数字34的行

[root@server2 data]# grep "[34]" data.txt 
oo3xx
oo4xx
oo1234xx

4、包含4位整数的行

[root@server2 data]# grep "[0-9]{4}" data.txt 
[root@server2 data]# grep "[0-9]\{4\}" data.txt 
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo1234xx
[root@server2 data]# grep -E "[0-9]{4}" data.txt 
ooxx12121212ooxx
ooxx 12121212
oox 12121212
1212 ooxx 1212
oo1234xx

5、包含"ooxx"单词的行

[root@server2 data]# grep "\<ooxx\>" data.txt 
ooxx 12121212
1212 ooxx 1212
$ooxx

6、包含4位数字(位数正好是4)的行

[root@server2 data]# grep "\(^[0-9]\|[^0-9][0-9]\)[0-9]\{2\}\([0-9]$\|[0-9][^0-9]\)" data.txt 
1212 ooxx 1212
oo1234xx

[root@server2 data]# grep -E "(^[0-9]|[^0-9][0-9])[0-9]{2}([0-9]$|[0-9][^0-9])" data.txt 
1212 ooxx 1212
oo1234xx

第一位两种情况,以数字开头或不以数字开头:(^[0-9]|[^0-9][0-9])

中间2位是数字:[0-9]{2}

最后一位,以数字结尾或不以数字结尾:([0-9]$|[0-9][^0-9])

另一种实现方式:

[root@server2 data]# grep -E  "^[0-9]{4}[^0-9]|[^0-9][0-9]{4}[^0-9]|[^0-9][0-9]{4}$|^[0-9]{4}$" data.txt 
1212 ooxx 1212
oo1234xx

把4位数字出现的情况全都列举出来

三、测试数据2

aaabbcaaa
aa bbc aaa
bb bbc bbb
asgodssgoodsssagodssgood
asgodssgoodsssagoodssgod
sdlkjflskdjf3slkdjfdksl
slkdjf2lskdjfkldsjl
[root@server2 data]# grep "a" test
aaabbcaaa
aa bbc aaa
asgodssgoodsssagodssgood
asgodssgoodsssagoodssgod
[root@server2 data]# grep  "a\{3\}"  test
aaabbcaaa
aa bbc aaa
[root@server2 data]# grep  "\<aaa"  test
aaabbcaaa
aa bbc aaa
[root@server2 data]# grep  "\<aaa\>"  test
aa bbc aaa
[root@server2 data]# grep "b" test
aaabbcaaa
aa bbc aaa
bb bbc bbb
[root@server2 data]# grep  "b\{2,3\}" test
aaabbcaaa
aa bbc aaa
bb bbc bbb
[root@server2 data]# grep ".*god.*good" test 
asgodssgoodsssagodssgood
asgodssgoodsssagoodssgod
[root@server2 data]# grep ".*good.*god" test 
asgodssgoodsssagodssgood
asgodssgoodsssagoodssgod
[root@server2 data]# grep ".*god.*good.*god.*good" test 
asgodssgoodsssagodssgood
[root@server2 data]# grep ".*god.*good.*good.*god" test 
asgodssgoodsssagoodssgod
[root@server2 data]# grep ".*\(god\).*\(good\).*\1.*\2" test 
asgodssgoodsssagodssgood
[root@server2 data]# grep ".*\(god\).*\(good\).*\2.*\1" test 
asgodssgoodsssagoodssgod

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值