shell编程学习笔记之正则表达式初识
1.1单字符: ‘X’
$ grep ‘q’ passwd //查找单个字符
1.2 范围字符 [] [^]
1.3 任意字符 .
$ grep '[1-9]' passwd //查找某个范围的单个字符(范围)
$ grep '[a-zA-Z]' passwd //查找某个范围的单个字符(范围)
$ grep '[a-zA-Z:/,_-()]' passwd ------------>$ grep '[^0-9]' passwd //取反
2.正则表达式的符号:
边界字符:
2.1头字符: ^ :^root 以root开始的
2.2 围字符:$ : $flase :以flase结束的
2.3 空行 : ^$ :头尾相碰表示空行
元字符:
\w :匹配任意字类字符
\W :匹配任意非字类字符
\b :代表字符的分割
3.正则表达字符组合
grep ‘[0-9][0-9]’ passwd
3.1重复
* : 零次或多次 匹配前面的字符或表达式
+ :一次或多次 ……
?:零次或一次……
1 [email protected]:~$ cat test 2 3 sesesese 4 5 6 se 7 8 9 seeeee 10 11 12 13 s+s+ 14 15 16 50000000
1 [email protected]:~$ grep 'se*' test 2 3 sesesese 4 5 se 6 7 seeeee 8 9 s+s+
[email protected]:~$ grep 'se+' test [email protected]:~$ grep 's+' test s+s+ [email protected]:~$ echo se+se+ >> test [email protected]:~$ grep 'se+' test se+se+ [email protected]:~$ grep 'se\+' test //加上反斜杠,进行转义 sesesese se seeeee se+se+ [email protected]:~$ grep 'se?' test [email protected]:~$ grep 'se\?' test sesesese se seeeee s+s+ se+se+ [email protected]:~$ [email protected]:~$ grep '\(se\)*' test //零次匹配会出现空行或者完全不匹配 sesesese se seeeee s+s+ 50000000 se+se+ [email protected]:~$ grep '\(se\)\+' test //反斜杠 使用括号对字符串重复 sesesese se seeeee se+se+
3.2重复特定次数 {n,m}
[email protected]:~$ grep '[0-9]{2,3}' passwd
[email protected]:~$ grep '[0-9]\{2,3\}' passwd //重复两到三次
3.3 逻辑符号表示
贪婪匹配:尽可能匹配最大长度
任意字符串: .*
逻辑或 | :
[email protected]:~$ grep 'bin/\(false\|true\)' passwd systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
3.4.字符组合小结:
4.正则表达式案例
4.1.匹配4-10位的QQ号码
grep '^[0-9]\{4,10\}$' qq.txt //首尾^$
4.2匹配15或18位身份证号码 (支持X)
$ grep '^[1-9]\([0-9]\{13\}\|[0-9]\{16\}\)[0-9xX]&' qq.txt
4.3 匹配密码 (数字、26字母、下划线)
$grep ‘^\w\+$’ qq.txt
5.正则表达式总结