>我有一个包含字符串的文件,例如{?ENV1}
{?ENV2}
我想使用 grep 来查找这些
grep -o '{?S+?}' myfile
但我得到grep: bad regex '{?S+?}': Repetition not preceded by valid expression
在正则表达式101网站中,正则表达式工作。grep 的工作方式是否不同?
POSIXgrep
默认正则表达式引擎是 POSIX BRE。您不应该转义大括号或使用S
。前者会导致特殊含义(您看到的错误原因(,后者不受支持。尝试:
grep -o '{?[^{}]*}' file
或者为了保持S
目的:
grep -o '{?[^[:space:]]*}' file
甚至要解决+
量词:
grep -o '{?[^[:space:]][^[:space:]]*}' file
对基于 Perl 的正则表达式使用-P
标志(尽管仍处于实验阶段(
grep -oP '{?S*}' myfile
或
尝试使用更新的正则表达式执行此操作。您可以使用*
grep -o '{?S*}' myfile