Erro de sintaxe Grep com regex correto [duplicado]

2

Eu criei um regex que eu preciso rodar com o grep, eu tenho certeza que o regex é bom já que funciona com ferramentas de regex online, no entanto quando eu corro

grep -r -P -o -h '(?<=(?<!def )my_method )(["'])(?:(?=(\?)).)*?'

Eu recebo o erro Syntax error: ")" unexpected .

    
por user2320239 03.04.2017 / 14:05

2 respostas

10

Sua expressão regular é citada com aspas simples, mas também contém uma única citação.

A aspa simples em ["'] precisa ser escapada ou sinalizará o final da string citada para o shell.

Isso consertará:

grep -r -P -o -h '(?<=(?<!def )my_method )(["'\''])(?:(?=(\?)).)*?'
#                                            ^^^^

Com ["'\''] , o primeiro ' termina a primeira parte da sequência, o \' insere uma aspa simples literal e o último ' inicia uma nova sequência de aspas simples que será concatenada com a anterior bits. Apenas a aspa simples do meio terminará na expressão regular, e as outras duas serão removidas pelo shell.

    
por 03.04.2017 / 14:11
5

Como o @Kusalananda explicou , o problema é o ' dentro do regex. Uma solução simples é usar " para o regex, já que " pode ser escapado mesmo dentro de uma string " -quoted, ao contrário de ' , que não pode ser escapado dentro de uma string ' -quoted:

grep -rPoh "(?<=(?<!def )my_method )([\"'])(?:(?=(\?)).)*?"
    
por 03.04.2017 / 14:39