Grep e e se 75

Grep e e se 75

Estou tentando executar o comando deE se 75:

 cat wordlist.txt | perl -pe 's/^(.*)$/\L$& \U$&/g' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' '2223334445556667777888999' | grep -P "(.)\1\1\1\1\1"

Substituí wordlist.txtpor /usr/share/dict/wordsporque estou no OS X.

Quando executo o comando, tudo que recebo é a grepmensagem de uso de. Se eu executar o comando com a parte grep removida, parece estar fazendo o que deveria.

Como posso editar o comando para que funcione corretamente?

EDITAR:Troquei grep -Ppor egrepe funcionou bem.

Responder1

O código do xkcd usagrep GNU(muitas distros Linux), nãoGrupo BSD(Mac OS X).

grep GNUtem alguns recursosGrupo BSDnão, por exemploExpressões regulares compatíveis com Perl(PCRE).

O padrão no seu exemplo, (.)\1\1\1\1\1na verdade, funciona tanto para PCRE quanto para PCRE.Expressões regulares estendidas(ANTES); se você modificar um pouco a sintaxe, poderá até usarExpressões regulares básicas(BRE):

grep -P "(.)\1\1\1\1\1"
grep -E "(.)\1\1\1\1\1"
grep "\(.\)\1\1\1\1\1"

tudo funciona conforme o esperado, desde que o recurso esteja disponível. Os dois últimos funcionarão no OS X ou em qualquer outra implementação sem extensões GNU.

Para uma definição formal de BRE e ERE, cliqueaqui.

Para as diferenças entre BRE, ERE e PCRE, consultePor que minha expressão regular funciona em X, mas não em Y?.

informação relacionada