Grep e se 75

1

Estou tentando executar o comando de E se 75 :

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

Substitui wordlist.txt por /usr/share/dict/words porque estou no OS X.

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

Como posso editar o comando para que ele funcione corretamente?

EDIT: substituí grep -P por egrep e funcionou bem.

    
por dejay 23.03.2014 / 01:49

1 resposta

1

O código do xkcd usa GNU grep (muitas distribuições do Linux), não BSD grep (Mac OS X).

GNU grep tem alguns recursos BSD grep , por exemplo, Expressões regulares compatíveis com Perl (PCRE).

O padrão no seu exemplo, (.) , na verdade funciona tanto para PCRE quanto para Expressões regulares estendidas (ERE); se você modificar a sintaxe levemente, você pode até usar Basic Regular Expressions (BRE):

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

todo o trabalho 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 as extensões do GNU.

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

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

    
por 23.03.2014 / 05:51