我的文件中包含{?ENV1}
{?ENV2}
我想用grep来找到这些
grep -o '\{\?\S+?\}' myfile
但是我明白了
grep: bad regex '\{\?\S+?\}': Repetition not preceded by valid expression
在regex101网站上正则表达式有效。 grep的工作方式不同吗?
答案 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
*