我有一个大文本文件,其中每个单词都放在不同的行上,我需要查找包含任何字母的每个单词最多一次
(我需要找到的单词示例:手指、煤炭、梦想、我、花生)
(我不允许在输出中接收的单词示例:test(包含 2 个 t)、severe(包含 2 个 s)、zepelin(包含 2 个 e))
答案1
使用 GNU sed
:
sed -E '/(.).*\1/d' <file
使用 GNU sed
,可以在正则表达式中使用捕获组和反向引用,如下所示。我们使用 捕获单个字符(.)
,然后捕获任意数量的其他字符,然后再次捕获相同的字符。如果模式匹配,则从输入中删除该行,否则打印该行。
例子:
$ cat file
coal
dream
fingers
me
peanut
serious
zepelin
$ sed -E '/(.).*\1/d' <file
coal
dream
fingers
me
peanut
查找具有重复字符的单词:
$ sed -E '/(.).*\1/!d' <file
serious
zepelin
grep
这似乎也适用于 GNU :
$ grep -vE '(.).*\1' <file
coal
dream
fingers
me
peanut
$ grep -E '(.).*\1' <file
serious
zepelin