3

当我在 precced 中使用量化时,返回此错误,请参阅多个示例:

printf 'Joe Satriani\nWhitney Houston\n' | grep -Poi '(?<=J\w)[\w\s]+'
e Satriani

printf 'Joe Satriani\nWhitney Houston\n' | grep -Poi '(?<=J\w+)[\w\s]+' 
grep: lookbehind assertion is not fixed length

printf 'Joe Satriani\nWhitney Houston\n' | grep -Poi '(?<=J\w{2})[\w\s]+' 
Satriani

我不能在precced中使用量化?

4

1 回答 1

5

在 Perl 中,可以通过后向匹配匹配的所有字符串的长度必须相同。显然,您的grep工具也是如此。

在 Perl 中,您的问题将使用捕获来解决。

say $1 if /J\w+\s+(\w[\w\s]*)/;

在 Perl\K中,在进行替换时通常可以用来解决类似的问题,而且它看起来也得到了支持grep

$ printf 'Joe Satriani\nWhitney Houston\n' | grep -Poi 'J\w+\s+\K\w[\w\s]*'
Satriani

我印象深刻!

于 2012-06-09T05:00:51.623 回答