
Estoy intentando ejecutar el comando desde¿Y si 75?:
cat wordlist.txt | perl -pe 's/^(.*)$/\L$& \U$&/g' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' '2223334445556667777888999' | grep -P "(.)\1\1\1\1\1"
wordlist.txt
Lo reemplacé /usr/share/dict/words
porque estoy en OS X.
Cuando ejecuto el comando, todo lo que aparece es grep
el mensaje de uso. Si ejecuto el comando sin la parte grep, parece estar haciendo lo que debería.
¿Cómo puedo editar el comando para que funcione correctamente?
EDITAR:Lo reemplacé grep -P
con egrep
y funcionó bien.
Respuesta1
El código de xkcd usagrupo GNU(muchas distribuciones de Linux), nogrupo BSD(Mac OS X).
grupo GNUtiene algunas característicasgrupo BSDno lo hace, por ejemploExpresiones regulares compatibles con Perl(PCRE).
El patrón en su ejemplo, (.)\1\1\1\1\1
en realidad funciona tanto para PCRE como paraExpresiones regulares extendidas(ANTES DE); Si modificas ligeramente la sintaxis, incluso puedes usarExpresiones regulares básicas(BRE):
grep -P "(.)\1\1\1\1\1"
grep -E "(.)\1\1\1\1\1"
grep "\(.\)\1\1\1\1\1"
Todo funciona como se esperaba, siempre que la función esté disponible. Los dos últimos funcionarán en OS X o cualquier otra implementación sin extensiones GNU.
Para obtener una definición formal de BRE y ERE, haga clic enaquí.
Para las diferencias entre BRE, ERE y PCRE consultar¿Por qué mi expresión regular funciona en X pero no en Y?.