linux - 使用 grep 从字典中删除词根已经存在的单词

标签 linux bash dictionary grep

我正在尝试编写一个随 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 中。

如果所有相似的字符串总是相邻的(如果你按词法对文件进行排序,它们就会相邻),你也可以完全取消 kp,我猜猜。

awk 'NR>1 && $1~r { next } { print; r="^" $1 }' words

关于linux - 使用 grep 从字典中删除词根已经存在的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238090/

相关文章:

bash - 在 bash 中使用管道缓冲来自串行设备的数据

python - 如何列出 dict.items() 中所有可能的 3 个字母组合?

linux - 即使路径正确,shell 脚本 cd 也会失败

python - systemd 服务无法启动 bash 脚本

linux - 有没有 libpcap 和 libnet 的例子?

linux - 如何配置不同的 ALSA 默认值以通过一台设备捕获并通过另一台设备播放?

bash - 在 bash 中查找文件中出现频率最高的行

linux - 如果在执行 `git checkout $tag` 命令之前存在标签,我如何检查间隔循环?

javascript - 如何匹配 Javascript 中的空字典?

ios - TableView 的快速排序字典