그렙과 만약에 75

그렙과 만약에 75

다음에서 명령을 실행하려고 합니다.75라면 어떨까요?:

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

나는 OS X를 사용하고 있기 때문에 wordlist.txt로 교체했습니다 ./usr/share/dict/words

명령을 실행할 때 얻는 것은 grep의 사용법 메시지뿐입니다. grep 부분을 제거한 상태에서 명령을 실행하면 해야 할 작업을 수행하는 것 같습니다.

명령이 올바르게 작동하도록 하려면 어떻게 편집해야 합니까?

편집하다:grep -P으로 교체했는데 egrep잘 작동했습니다.

답변1

xkcd의 코드는 다음을 사용합니다.GNU grep(많은 Linux 배포판)BSD grep(맥 OS X).

GNU grep몇 가지 기능이 있습니다BSD grep그렇지 않습니다. 예를 들어Perl 호환 정규 표현식(PCRE).

귀하의 예에 있는 패턴은 (.)\1\1\1\1\1실제로 PCRE와확장 정규식(오히려); 구문을 약간 수정하면 다음을 사용할 수도 있습니다.기본 정규식(BRE):

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

기능을 사용할 수 있는 한 모든 것이 예상대로 작동합니다. 후자 두 개는 OS X 또는 GNU 확장 없이 다른 구현에서 작동합니다.

BRE 및 ERE의 공식 정의를 보려면 다음을 클릭하세요.여기.

BRE, ERE, PCRE의 차이점은 다음을 참조하세요.내 정규 표현식이 X에서는 작동하지만 Y에서는 작동하지 않는 이유는 무엇입니까?.

관련 정보