grep
是一个在 Unix 和 Linux 系统中广泛使用的文本搜索工具,用于在文件中搜索符合特定模式(尤其是正则表达式)的行。grep
支持两种正则表达式语法:
基本正则表达式 (BRE):这是
grep
默认使用的正则表达式类型,除非你指定了-E
选项。在 BRE 中,某些特殊字符需要被反斜杠\
进行转义,例如,.
(匹配任意单个字符)和*
(匹配前面的字符零次或多次)。示例:
grep 'foo\.' file.txt
将会搜索包含 "foo."(点号匹配任何字符)的行。grep 'ba[rz]' file.txt
将会搜索包含 "bar" 或 "baz" 的行。
扩展正则表达式 (ERE):当你使用
-E
参数时,grep
使用 ERE,这时许多特殊字符无需转义,并且支持更多的元字符和构造,如?
(匹配前面的字符零次或一次)、+
(匹配前面的字符一次或多次)和( )
用于分组和引用。示例:
grep -E 'foo.bar' file.txt
将会搜索包含 "foo" 后跟任意字符再跟 ".bar" 的行。grep -E 'ba[rz]+' file.txt
将会搜索连续出现一个或多个 "r" 或 "z" 且前面是 "b" 和 "a" 的行。
一些常用 grep
正则表达式示例包括:
- 匹配 IP 地址:
grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' file.txt
- 匹配以某个单词开头的行:
grep '^start_of_line' file.txt
- 匹配行尾含有特定单词:
grep 'end_of_line$' file.txt
- 显示仅匹配的部分(而非整行):
grep -o 'pattern' file.txt
通过灵活运用正则表达式,grep
成为了一个非常强大的文本搜索工具,在日常运维、编程和数据分析等场景中扮演着重要角色。