Bash 如何删除以另一个完整单词开头的所有单词

Bash 如何删除以另一个完整单词开头的所有单词,bash,Bash,我需要查一本字典,删除所有以另一个完整单词开头的单词--“attic”,例如,以“at”开头的单词,所以我想删除它。我编写了一个bash脚本: while read p; do sed -i "/^$p./d" words.txt.tmp done < words.txt.tmp 读取p时;做 sed-i“/^$p./d”words.txt.tmp 完成

我需要查一本字典,删除所有以另一个完整单词开头的单词--“attic”,例如,以“at”开头的单词,所以我想删除它。我编写了一个bash脚本:

while read p; do
    sed -i "/^$p./d" words.txt.tmp
done < words.txt.tmp
读取p时
;做
sed-i“/^$p./d”words.txt.tmp
完成

但一分钟后,它仍然在a的,这是不好的。有更有效的方法吗?

您可以使用
grep-v
过滤模式。您可以使用进程替换将
^
放在单词列表中每个单词的开头,并将其用作模式文件

grep -v -f <(sed 's/.*/^&./' words.txt.tmp) words.txt.tmp > words.txt.filtered
grep-v-f words.txt

您可以使用
grep-v
过滤模式。您可以使用进程替换将
^
放在单词列表中每个单词的开头,并将其用作模式文件

grep -v -f <(sed 's/.*/^&./' words.txt.tmp) words.txt.tmp > words.txt.filtered
grep-v-f words.txt