grep:未转义^或$不支持-Pz

时间:2016-06-03 15:53:50

标签: regex bash shell grep

我想知道为什么在新版本的grep(Ubuntu 16.04)中我的bash脚本停止工作:

...
COMMIT_REGEX='^\[[A-Z]+-[0-9]+\] \s*\S+(?:.|\n|\r)*\s* \(review: ([a-z]+\.[a-z]+|MYSELF)\)$'

if ! grep -Paz "$COMMIT_REGEX" "$1"; then
...

我得到" grep:unescaped ^或$不支持-Pz"。我试图逃避^和$符号,但它没有帮助。

在Ubuntu 15.10脚本中运行完美。

1 个答案:

答案 0 :(得分:3)

问题似乎是bug with grep -PzLars Fischer用于查找相关报告的结果)。

我建议放弃-P开关并改为使用-E

commit_re='^\[[A-Z]+-[0-9]+\] \s*\S+(.|\n|\r)*\s* \(review: ([a-z]+\.[a-z]+|MYSELF)\)$'

if ! grep -qEaz "$commit_re" "$1"; then

我所做的唯一更改是将-P更改为-E并添加-q(安静)切换,因为您只对返回代码感兴趣。您实际上并不需要非捕获组,所以我将其更改为正常组。

我也不喜欢看到ALL_CAPS变量名,因为它们应该保留给shell使用。

相关问题