一、基础知识
匹配操作符
- \ 转义字符
- . 匹配任意单个字符
- [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