![使用 grep 命令和反向引用](https://linux22.com/image/48626/%E4%BD%BF%E7%94%A8%20grep%20%E5%91%BD%E4%BB%A4%E5%92%8C%E5%8F%8D%E5%90%91%E5%BC%95%E7%94%A8.png)
这是一个非常基本的问题,但我无法理解它。我正在学习 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