一些英语单词包含“abba”结构,例如“明天”或“更好”。给定文件有多少行包含这样的单词?我如何使用 grep 搜索这些单词?
答案1
用 GNU grep 试试这个:
grep '\(.\)\(.\)\2\1' file | wc -l
答案2
如果您正在寻找匹配的模式回文- 或者向前和向后拼写相同的单词 - 你可能打开 GNUgrep
的info grep
页面并发现......
Guglielmo Bondioni 提出了一个 RE,它使用 9 个子表达式和 9 个反向引用来查找所有长度不超过 19 个字符的回文:
grep -xE '(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\9\8\7\6\5\4\3\2\1'
请注意,这是使用 GNU ERE 扩展完成的;它可能无法移植到 的其他实现
grep
。
...现在就匹配了阿爸, 但不是tomorrow
或者better
因为这两个词都不是回文。
我认为,关于可移植性的说明特别指的是在扩展正则表达式模式中使用反向引用 - 我认为,您需要更多的反斜杠和 a\{0,1\}
来替换每个问号以获得完全可移植的表达式。
答案3
grep -xE '.+(.)(.)\2\1.+'
grep -xE '(.)(.)\2\1'