É possível usar o GNU grep para obter um grupo correspondente de uma expressão?
Exemplo:
echo "foo 'bar'" | grep -oE "'([^']+)'"
O que produziria "'bar'". Mas eu gostaria de obter apenas "barra", sem ter que enviá-lo através do grep mais uma vez (ou seja, obter o grupo correspondente). Isso é possível?
( ) +
uso\( \) \+
: Este é efetivamente o mesmo:sed "s/.*'\([^']\+\)'.*/\1/"
sed -n "s/.*'\([^']\+\)'.*/\1/p"
Enquanto o grep não pode gerar um grupo específico, você pode usar as declarações lookahead e behind para obter o que quer depois:
fonte
grep -P
não está disponível em todas as plataformas. Mas, se estiver, usar lookahead / behind é uma maneira muito boa de resolver o problema.Você pode usar
\K
para redefinir e descartar o texto da correspondência à esquerda, juntamente com um cabeçote que não seja adicionado ao texto da correspondência:Somente GNU grep.
fonte