本文默认你对正则表达式有基本的了解。

本文试图让你以后使用 grep/sed/awk 时,不需要为他们的差异而头疼。

本文试图解释两个概念:基础正则表达式和扩展正则表达式(这两个概念的名字简直就是瞎起的,太容易让人误解了)。

grep/sed/awk 中正则表达式的区别

5 个通用匹配符:

5 个特殊匹配符:

awk 可以直接使用以上所有匹配符。

grep 和 sed 加上-E 参数后可以直接使用以上所有匹配符。若无-E 参数,需在特殊匹配符前加转义符\

事实上,所谓扩展正则表达式 (ERE),并不是对正则表达式进行了扩展。扩展正则表达式 (ERE) 能做的事,基础正则表达式 (BRE) 一样能做,只是加不加转义符的区别。如,想要匹配aaaaa

BRE 写法:grep 'a\{2,3\}'

ERE 写法:grep -E 'a{2,3}'

又如,对于以下文件:

a+
aaa

grep '^a+$' 匹配第一行。 等价于grep -E '^a\+$'

grep '^a\+$' 匹配第二行。 等价于 grep -E '^a+$'

建议

在三剑客中,以下 5 个匹配符也非常有用。

个人建议,在 grep/sed/awk 中只使用本文列出的 15 个匹配符,未列出的其他匹配符,有的支持有的不支持,容易记错 (如: awk 不支持\b)。

参考

https://www.gnu.org/software/sed/manual/html_node/BRE-vs-ERE.html


↙↙↙阅读原文可查看相关链接,并与作者交流