Como fazer com que o BSD grep respeite a âncora de início de linha

1

Estou tentando combinar o primeiro caractere em uma linha com grep e imprimir apenas esse caractere. Com o GNU grep 2.20 no Linux eu faço algo assim:

$ echo ab | grep -o '^.'
a
$ 

Isso funciona como eu esperava - o ^ ancora o regexp no início da linha e apenas o caractere a é impresso.

No entanto, com o BSD grep 2.5.1 no MacOS, obtenho um resultado diferente:

$ echo ab | egrep -o '^.'
a
b
$

É como se a âncora de início de linha ^ estivesse sendo ignorada. Curiosamente, a âncora de fim de linha $ funciona como esperado em grep flavors:

$ echo ab | grep -o '.$'
b
$ 

Curiosamente, o BSD grep respeita a âncora de início de linha ^ se a opção -o não for usada:

$ { echo a ; echo b; } | grep '^a'
a
$  
  • O BSD grep tem outra forma de expressar ^ quando -o é usado?

  • Existe uma maneira portátil de expressar ^ quando o -o é usado para usar com o Linux e o MacOS?

  • Isso é um bug no BSD grep?

por Digital Trauma 05.03.2018 / 19:19

1 resposta

1

Indo um pouco mais a fundo, encontrei esse comportamento relatado em um bug do FreeBSD :

I've noticed some more issues with the same version of grep. I don't know whether they're related, but I'll append them here for now.

$ printf abc | grep -o '^[a-c]'

should just print 'a', but instead gives three hits, against each letter of the incoming text.

Mas não está claro para mim se ou quando isso será corrigido.

    
por 05.03.2018 / 20:53

Tags