Por que echo “a ']” | grep -E “\ '” não combina?

3

Com base na pergunta sobre o SO , descobri que:

echo "a']" | grep -E "\a"

Corresponde a OK.

echo "a']" | grep -E "\]"

Corresponde a OK.

Mas:

echo "a']" | grep -E "\'"

Não corresponde. Não consigo encontrar nenhuma documentação para descrever exatamente como grep -E lida com uma única citação. Estou usando o GNU grep 2.16 no Ubuntu 14.04.

NB:

echo "a']" | grep -E "'"

Corresponde OK, mas estou curioso sobre como grep -E está interpretando \' .

Atualização:

Eu apenas tentei isso no Cygwin 2.6.1 e no grep 2.27 e posso reproduzir. Usar grep --colour -Eo talvez ofereça um resultado OK / Fail mais claro?

    
por Ken Y-N 26.12.2016 / 02:40

1 resposta

7

Não é apenas o GNU grep, com o GNU sed e o GNU awk: echo "a']" | sed "s/\'/foo/" - > a']foo e echo "a']" | awk "{sub(/\'/,\"foo\")}1" - > %código%. Quando você executa o awk no modo POSIX, ele não faz isso, mas exibe o comportamento esperado: a']foo - > echo "a']" | awk --posix "{sub(/\'/,\"foo\")}1" .

A questão é que existe um GNU-ism que afoo] significa o mesmo que \' , veja link :

Additional GNU Extensions
....
The anchor \' (backtick) matches at the very start of the subject string,
while \' (single quote) matches at the very end. 

Se alguém tiver um caso de uso em que $ seja diferente de \' , adoraria ouvi-lo.

    
por 26.12.2016 / 18:05