标准正则表达式
^ 匹配行的开始。
$ 匹配行的结尾
. 匹配单个字符(除行尾)
[] 匹配字符集
$ echo -e “Call\nTall\nBall” | sed -n ‘/[CT]all/ p’
Call
Tall
[^] 排除字符集
$ echo -e “Call\nTall\nBall” | sed -n ‘/[^CT]all/ p’
Ball
[-]字符范围。
$ echo -e “Call\nTall\nBall” | sed -n ‘/[C-Z]all/ p’
Call
Tall
? ,+ ,*
分别对应0次到1次,一次到多次,0次到多次匹配。
{n} ,{n,} ,{m, n}
精确匹配N次,至少匹配N次,匹配M-N次
或操作。
echo -e “str1\nstr2\nstr3\nstr4” | sed -n ‘/str(1|3)/ p’
str1
str3
Shell常见通配符:
通配符
含义
实例
匹配 0 或多个字符
a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
?
匹配任意一个字符
a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list]
匹配 list 中的任意单一字符
a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list]或[^list]
匹配 除list 中的任意单一字符
a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2]
匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b… a9b。
[!c1-c2]或[^c1-c2]
匹配不在c1-c2的任意字符
a[!0-9]b 如acb adb
{string1,string2,…}
匹配 sring1 或 string2 (或更多)其一字符串
a{abc,xyz,123}b 列出aabcb,axyzb,a123b