
xxx<1+ whitespaces>"
我尝试匹配和之间的任何字符(换行符除外)whitespace
。
输入字符串的格式如下:
xxx<1+ whitespaces>"yyy<1+ whitespaces>zzz"
我尝试使用以下 PCRE:
$ echo 'xxx "yyy zzz"' | grep -Po '(?<=\xxx\s+").*?(?=\s)'
grep: lookbehind assertion is not fixed length
然而,正如我们所见,PCRE 不支持浮动后视,因为这可能会导致严重的性能问题。
解决方法如下:
$ echo 'xxx "yyy zzz"' | grep xxx | grep -Po '(?<=").*?(?=\s)'
yyy
这里我们看到它是起作用的,但是grep
被调用了两次,这可能被认为是次优的。
是否只需一次grep
调用就能达到相同的结果?
如果没有,那么是否有可能实现相同的结果,但只需一次<toolname>
(可能awk
)调用?
答案1
使用重置运算符:\K
$ echo 'xxx "yyy zzz"' | grep -Po 'xxx\s+"\K.*?(?=\s)'
yyy