正则表达式:
基本正则表达式主要用于grep,egrep,vi,sed,awk命令中进行字符串匹配。
符号 | 意义 |
c | 匹配字母c |
. | 匹配任意单个字符 |
* | 匹配前一个字符出现零次或多次 |
. * | 匹配任意多个任意字符 |
[] | 匹配集合中的任意单个字符,括号中为一个集合 |
[x-y] | 匹配连续的字串范围 |
^ | 匹配字串的开头 |
$ | 匹配字串的结尾 |
[^] | 匹配否定,对括号中的集合取反 |
\ | 匹配转义后的字串 |
\{n\} | 匹配前一个字符出现n次 |
\{n,\} | 匹配前一个字符重复至少出现n次 |
\{n,m\} | 匹配前一个字符重复n~m次 |
\(\) | 将\(与\)之间的内容存储在”保留空间”,最大存储9个 |
\n | 通过\1至\9调用保留空间中的内容 |
举例:
(1) 查询:与0:之间包含两个字符的字串,并显示该行
grep :..0: /etc/passwd
(2 )查询至少包含一个0的行
grep 00* /etc/passwd
(3) 查询包含oot或者ost的行
grep o[os]t/etc/passwd
(4) 查询以ro开头的行
grep ^ro /etc/passwd
(5) 查询以bash结尾的行
grep bash$ /etc/passwd
(6) 查询bin/后面不跟n的行
grep bin/[^n] /etc/passwd
(7)查询0出现一次或两次的行
grep '0\{1,2\}'/etc/passwd
(8)查询首尾均为root,其中包含任意多个root的字串,并显示该行
grep '\(root\).*\1' /etc/passwd
(9)查询包含以root:开头:root结尾字串行
grep '\(root\)\(:\).*\2\1' /etc/passwd
(10)过滤文件的空白行
grep ^$ /etc/passwd
针对例(9)给出几个测试,希望能帮助理解。
扩展正则表达式:
主要用于egrep和awk命令的字符串匹配
符号 | 意义 |
{n,m} | 等同于基本正则表达式的\{n,m\} |
+ | 匹配前一个字符出现一次或多次 |
? | 匹配前一个字符出现零次或一次 |
| | 匹配逻辑或者,即匹配|前或后的字串 |
() | 匹配正则集合 |
(1) 查询0出现一次和两次的行
egrep '0{1,2}' /etc/passwd
(2) 查询至少包含一个0的行
egrep '0+' /etc/passwd
(3) 查询包含root或者admin的行
egrep 'root|admin'/etc/passwd
以上参考了《Linux运维之道》部分内容。