字母:
. 任意字符
[] 其中一个字符
[^] 除
次数:
* 0次以上
\? 0次或1次
\+ 1次以上
\{n\} n次
\{n,\} 大于n次
\{,n\} 小于n次
\{m,n\} 大于m,少于n
位置:
^ 行首
$ 行尾
\<或\b 单词词首 \<root\>
\>或b\ 单词词尾 \broot\b
分组:
\( \) 多个字符捆绑一起
\| 或者
后项引用
\1 引用第一个小括号字符
\2 引用第二个小括号字符
\(abc1\+(abc2\)*\)\1\2
按括号出现顺序匹配 引用的是输出结果,并非字符
练习:
正则表达式
提取网卡里面的IP地址
ifconfig eno16777736 |grep -o "[0-9.]\{7,\}" |head -n1
ifconfig eno16777736 |grep -o "[[:digit:]]\{1,3\}[.][[:digit:]]\{1,3\}[.][[:digit:]]\{1,3\}[.][[:digit:]]\{1,3\}" |head -n1
ifconfig eno16777736 |grep -o "inet [0-9]\+"
取分区利用率
df |grep "/dev/sd" |grep -o "[0-9]\{1,3\}%" |grep -o "[^%]\+" |sort -nr |head -n1
过滤空行
grep -v "^[[:space:]]*$" file
取系统版本号
grep -o "[[:digit:]]\+" /etc/centos-release |head -n1
取用户名、UID、SHELL
grep -Ew "^(root|wang|abc)" /etc/passwd |cut -d":" -f1,3,7