使用 grep 命令和反向引用

使用 grep 命令和反向引用

这是一个非常基本的问题,但我无法理解它。我正在学习 Linux,我收到的问题之一是;

*“sentimentalment”一词包含出现三次的相同三个字符(例如“ent”)。单词“blayblapblam”还包含重复三次的相同三个字符(例如“bla”)。

您能找到多少个包含重复三次的任意三个字符的单词,例如示例“sentimentalment”和“blayblapblam”,但它们也以小写“d”开头。使用 /usr/share/dict/words 作为可能的单词列表并使用 grep 来查找答案。 “d”不是检测三字符字符串时考虑的字符之一。*

到目前为止,我可以返回相同的三个字母出现两次的实例;

grep -E '^d(...).*\1' /usr/share/dict/words > output

对我来说,查找以“d”开头的单词,然后是三个字母的组合,在同一组 (1) 再次出现之前有 0 个或多个字符。

我已经尝试过以下操作;

grep -E '^d(...).*\1.*\1' /usr/share/dict/words > output

如果我的理解是正确的(显然不是),则返回第一组,然后返回零个或多个字符,然后再次返回第一组。

有人可以指出我哪里出错了吗?任何帮助表示赞赏。

答案1

看来您已将这三个字母固定在d.也许你需要这样的东西:

grep -E '^d.*(...).*\1' /usr/share/dict/words > output

这将使你的 3 模式搜索变成

grep -E '^d.*(...).*\1.*\1' /usr/share/dict/words > output

出于可移植性的原因,应该避免将扩展正则表达式与反向引用相结合,因此最好使用

grep '^d.*\(...\).*\1.*\1' /usr/share/dict/words > output

相关内容