Grep中的正则表达式错误“重复前面没有有效表达式”

时间:2018-05-23 12:19:43

标签: regex grep

我的文件中包含{?ENV1} {?ENV2}

等字符串

我想用grep来找到这些

grep -o '\{\?\S+?\}' myfile

但是我明白了 grep: bad regex '\{\?\S+?\}': Repetition not preceded by valid expression

在regex101网站上正则表达式有效。 grep的工作方式不同吗?

2 个答案:

答案 0 :(得分:1)

POSIX grep默认正则表达式引擎是POSIX BRE。你不应该逃避大括号或使用\S。前者导致特殊含义(您看到错误的原因),后者不受支持。尝试:

grep -o '{?[^{}]*}' file

或保持\S目的:

grep -o '{?[^[:space:]]*}' file

甚至可以解决+量词:

grep -o '{?[^[:space:]][^[:space:]]*}' file

答案 1 :(得分:0)

对基于Perl的正则表达式使用2018-05-22 15:10:10标志(尽管仍在实验阶段)

-P

使用更新的正则表达式尝试此操作。您可以使用grep -oP '\{\?\S*\}' myfile

*