我正在尝试编写一个随 secret 码生成器。我有一本包含一堆单词的字典,我想删除词根已经在字典中的单词,这样字典看起来像:
ablaze
able
abler
ablest
abloom
ably
只会结束
ablaze
able
abloom
ably
因为 abler 和 ablest 包含以前使用过的 able。
我更愿意使用 grep 来执行此操作,以便我可以了解更多有关其工作原理的信息。我有能力用 c 或 python 编写一个程序来执行此操作。
最佳答案
如果列表排序后较短的字符串总是在较长的字符串之前,您可能能够从一个简单的 Awk 脚本中获得相当不错的性能。
awk '$1~r && p in k { next } { k[$1]++; print; r= "^" $1; p=$1 }' words
如果当前单词匹配前缀正则表达式 r
(稍后定义)并且前缀 p
(同上)在可见键列表中,则跳过。否则,将当前单词添加到前缀键,打印当前行,在行首创建一个匹配当前单词的正则表达式(现在是前缀正则表达式 r
)并记住前缀字符串在 p
中。
如果所有相似的字符串总是相邻的(如果你按词法对文件进行排序,它们就会相邻),你也可以完全取消 k
和 p
,我猜猜。
awk 'NR>1 && $1~r { next } { print; r="^" $1 }' words
关于linux - 使用 grep 从字典中删除词根已经存在的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238090/