【发布时间】:2020-12-17 19:25:06
【问题描述】:
在 CentOS 8 上,这个 grep 表达式不返回匹配的字符串:
% dmidecode -t memory | grep -E '^[ \t]+Size: [0-9]+'
但是这个确实返回了匹配的行(在同一个发行版上):
% dmidecode -t memory | grep -E '^[[:space:]]+Size: [0-9]+'
这种行为的原因是什么?如您所见,grep 两次都在扩展正则表达式模式下被调用。
【问题讨论】:
-
在
grep '^[ \t]+Size: [0-9]+'中,模式被解析为 POSIX BRE。如果您希望将+解析为量词,请传递-E标志以使其成为 POSIX ERE。 -
您在第一个 grep 命令中缺少
-E -
发布问题时,我在第一个命令中错过了'-E',它应该在那里,仍然 grep 它不返回匹配的行。
-
那么你需要
grep -E '^[[:blank:]]+Size: [0-9]+'或grep -E '^[[:blank:]]+Size:[[:blank:]]+[0-9]+'。请注意,[ \t]作为正则表达式模式实际上等同于[:blank:]POSIX 字符类,而不是[:space:](它也包括纯空格)。 -
@WiktorStribiżew 不,这是正则表达式。第一个只是不像 OP 认为的那样工作。