Grep 和 What If 75

Grep 和 What If 75

我正在尝试运行命令如果 75

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

我替换了wordlist.txt因为/usr/share/dict/words我使用的是 OS X。

当我运行该命令时,我得到的只是grep使用消息。如果我运行删除了 grep 部分的命令,它似乎正在执行应该执行的操作。

我该如何编辑该命令以使其正常工作?

编辑:我将其替换grep -Pegrep,并且工作正常。

答案1

xkcd 的代码使用GNU grep(许多 Linux 发行版),不是BSD grep(Mac OS X)。

GNU grep有一些特点BSD grep没有,例如Perl 兼容正则表达式(PCRE)。

示例中的模式(.)\1\1\1\1\1实际上适用于 PCRE 和扩展正则表达式(ERE);如果稍微修改一下语法,你甚至可以使用基本正则表达式(英国房地产法规):

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 中无效?

相关内容