欢迎各位兄弟 发布技术文章
这里的技术是共享的
grep -E
详解grep -E
是 GNU grep 中用于启用扩展正则表达式 (Extended Regular Expressions, ERE) 的选项。下面是对这个选项的详细说明:
bashgrep -E "pattern" filename
或
bashegrep "pattern" filename # egrep 等同于 grep -E
-E
选项使 grep 使用扩展正则表达式语法,与默认的基本正则表达式 (BRE) 相比,ERE 提供了一些更简洁或更强大的特性:
元字符不需要转义:
BRE: 需要使用 $
和 \|
等转义形式
ERE: 可以直接使用 (
, |
等
支持更多操作符:
|
- 选择(或)
+
- 一次或多次
?
- 零次或一次
{n,m}
- 重复次数范围
()
bashgrep -E "(abc|def)" file # 查找 "abc" 或 "def"
|
bashgrep -E "apple|orange" file # 查找 "apple" 或 "orange"
+
- 一次或多次
bashgrep -E "go+l" file # 匹配 "gol", "goool" 等
?
- 零次或一次
bashgrep -E "colou?r" file # 匹配 "color" 和 "colour"
{n,m}
- 重复次数范围
bashgrep -E "[0-9]{3,5}" file # 匹配3到5位数字
^
- 行首
$
- 行尾
bashgrep -E "^start" file # 匹配以 "start" 开头的行 grep -E "end$" file # 匹配以 "end" 结尾的行
-i
忽略大小写
bashgrep -Ei "error" logfile
-v
反向匹配
bashgrep -Ev "^#" configfile # 排除注释行
-r
递归搜索
-l
只显示文件名
-c
显示匹配行数
查找 "error" 或 "warning":
bashgrep -E "error|warning" /var/log/syslog
匹配有效的电子邮件地址:
bashgrep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" emails.txt
查找重复的空行:
bashgrep -E "^$" file | wc -l # 统计空行数
匹配特定格式的日期:
bashgrep -E "[0-9]{4}-[0-9]{2}-[0-9]{2}" logfile
在某些系统中,egrep
已被弃用,推荐使用 grep -E
要匹配字面量的 ?
, +
, {
, |
, }
, (
, )
等字符时,需要用反斜杠转义
对于更复杂的模式匹配,可能需要使用 Perl 兼容的正则表达式 (PCRE),可通过 grep -P
启用(非所有系统支持)
grep -E
是处理稍微复杂文本模式的强大工具,掌握它可以显著提高文本处理的效率。