Estou tentando combinar qualquer caractere (exceto caracteres de quebra de linha) entre xxx<1+ whitespaces>"
e whitespace
.
O formato da string de entrada é o seguinte:
xxx<1+ whitespaces>"yyy<1+ whitespaces>zzz"
Eu tentei usar o seguinte PCRE:
$ echo 'xxx "yyy zzz"' | grep -Po '(?<=\xxx\s+").*?(?=\s)'
grep: lookbehind assertion is not fixed length
No entanto, como podemos ver, o PCRE não suporta lookbehind flutuante porque pode causar grandes problemas de desempenho .
Aqui está a solução alternativa:
$ echo 'xxx "yyy zzz"' | grep xxx | grep -Po '(?<=").*?(?=\s)'
yyy
Aqui vemos que funciona, porém, grep
é invocado duas vezes, o que pode ser considerado abaixo do ideal.
É possível obter o mesmo resultado, mas com apenas uma grep
invocação?
Se não, então é possível obter o mesmo resultado, mas com apenas uma <toolname>
(talvez awk
) invocação?
Use o operador de redefinição:
\K