egrep(grep -E) 支持正则表达式的拓展元字符
1、运用正则,判断需要[[ ]]
num1=1
[[ $num1 =~ ^[0-9]+$ ]] && echo "yes" || echo "no"
num3=1b1
[[ $num3 =~ ^[0-9]+$ ]] && echo "yes" || echo "no"
2、* 0或多个
useradd abrt
grep 'abc*' /etc/passwd
3、\< 词首定位符号 \>词尾定位符号
cat a.txt | egrep '\<[Jj]ack\>'
拓展:“ :% s/\<[Jj]ack\>/123/g ”
vim jack.txt
Jack JACK JAck jackly
:% s/\<[Jj]ack\>/123/g
4、^以什么开头
grep '^root' /etc/passwd
5、$以什么结尾
grep 'bash$' /etc/passwd
6、 . 匹配单个字符
grep 'r..t' /etc/passwd
grep 'r.t' /etc/passwd
7、.* 任意多个字符
grep 'r.*t' /etc/passwd
8、[ ] 匹配方括号中的任意一个字符
grep 'Root' /etc/passwd
grep '[Rr]oot' /etc/passwd
9、[ - ] 匹配指定范围内的一个字符
grep [a-z]oot /etc/passwd
10、[ ^ ] 匹配不在指定组内的字符,取反得意思
^在[]内表示取反,^在[]外表示以什么开头
grep '[^0-9]oot' /etc/passwd
grep '[^0-9A-Z]oot' /etc/passwd
grep '[^0-9A-Za-z]oot' /etc/passwd
grep '[a-z]oot' /etc/passwd
grep '^[rc]oot' /etc/passwd
11、\( \)匹配后的标签
vim file1.txt
IPADDR=192.168.1.123
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS=114.114.114.114
:% s#\(192.168.1.\)123#\12#
:% s#\(192.\)\(168.\)\(1.\)2#\1\2\35#
:% s#\(192.\)\(168.\)\(1.\)\(5\)#\1\26.\4#
12、+ 匹配一个或多个前导字符
egrep 'ro+t' /etc/passwd
13、? 匹配零个或一个前导字符
egrep 'ro?t' /etc/passwd
14、a|b 匹配a或b
netstat -anlp|egrep ':80|:22'
cat /etc/passwd | egrep 'root|alice'
15、x{m} 字符x重复m次
[root@localhost ~]# cat a.txt
love
love.
loove
looooove
cat a.txt | egrep 'o{2}' a.txt
cat a.txt | egrep 'o{2,}' a.txt
cat a.txt | egrep 'o{6,7}' a.txt
16、扩展正则表达式元字符
+ 匹配一个或多个前导字符
[a-z]+ove
? 匹配零个或一个前导字符
lo?ve
a|b 匹配a或b
love|hate
(..)(..)\1\2 标签匹配字符
(love)able\1er
x{m} 字符x重复m次
o{5
x{m,} 字符x重复至少m次
o{5,}
x{m,n} 字符x重复m到n次
o{5,10}