Expressões regulares vêm em muitos sabores diferentes. O que você está mostrando é uma expressão regular do tipo Perl (PCRE, "Expressão regular compatível com Perl").
grep
faz expressões regulares POSIX. Essas são expressões regulares básicas (BRE) e expressões regulares estendidas (ERE, se grep
usadas com a -E
opção). Consulte o manual para re_format
ou regex
ou qualquer outra coisa semelhante manual do seu grep
manual refere-se em seu sistema, ou os textos padrão POSIX que eu só vinculados.
Se você usa o GNU grep
, seria capaz de usar expressões regulares do tipo Perl se usasse grep
com a opção grep
específica do GNU -P
.
Observe também que grep
retorna linhas por padrão, não substrings de linhas. Novamente, com o GNU grep
(e algumas outras grep
implementações), você pode usar a -o
opção para obter apenas os bits que correspondem à expressão especificada de cada linha.
Observe que as extensões -P
e -o
não-padrão são a especificação POSIX degrep
.
Se você não estiver usando o GNU grep
, poderá usar sed
para obter o bit entre a string prefix
e o final da linha:
sed -n 's/.*prefix\(.*\)/\1/p' file
O que isso faz é imprimir apenas as linhas que sed
conseguem aplicar a substituição fornecida. A substituição substituirá a linha inteira que corresponder à expressão (que é um BRE), pela parte que ocorrer após a sequência prefix
.
Observe que, se houver várias instâncias de prefix
uma linha, a sed
variação retornará a sequência após a última , enquanto a grep
variação GNU retornará a sequência após a primeira (que incluiria as outras instâncias de prefix
).
A sed
solução seria portátil para todos os sistemas do tipo Unix.