regex não está funcionando como esperado no grep

0

Meu problema é sobre um regex. Graças a regexr , eu consegui escrever uma expressão que coincida com o nome da interface que o comando route linux me deu.

Mas não consigo falar com:

route | grep -Eo "(?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$"

Por que isso?

    
por Jules Randolph 03.11.2014 / 05:01

1 resposta

1

Programas diferentes (e diferentes versões do programa) podem usar diferentes implementações de regex. Tente reduzir ou dividir sua parte de regex por peça para saber qual recurso é suportado / não é suportado.

Por exemplo, eu preciso remover o especificador grupo que não captura ?: do seu exemplo para que meu GNU grep possa ser executado como esperado no Solaris 11.

Ou você pode tentar substituir -E por -P para usar Perl regex engine que, no meu caso, faz meu GNU grep capaz de rodar seu regex sem modificações adicionais.

route | grep -Po "(?:((\w|\.|\*)+\s+)){7}([^ .]+[0-9]+)$"

Nota: GNU grep no Solaris 11 está localizado em /usr/gnu/bin/grep

    
por 03.11.2014 / 14:28

Tags