使用 grep 查找每个字母最多出现 1 次的单词

使用 grep 查找每个字母最多出现 1 次的单词

我有一个大文本文件,其中每个单词都放在不同的行上,我需要查找包含任何字母的每个单词最多一次

(我需要找到的单词示例:手指、煤炭、梦想、我、花生)

(我不允许在输出中接收的单词示例: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

相关内容