关于删除文件中的单词的shell脚本

时间:2015-07-02 09:26:35

标签: bash shell

我正在尝试编写一个shell脚本来删除文件中的单词。这些单词在另一个文件中给出。例如:

输入文件:

I am new in shell script,so I need you help ,thank you

单词文件:

am
in
so

,输出文件应为:

I  new  shell script, I need you help ,thank you

我尝试编写这样的脚本:

cat words_file | while read line
do
        sed "s/$line//g" input >output
done

但只有最后一个单词“so”可以删除,如何在每个循环中保存结果以便我可以删除每个单词,还是有另一种方法来解决这个问题?

3 个答案:

答案 0 :(得分:2)

这应该有帮助

#!/bin/bash

cat inputfile | while read line
do
        sed -i "s/$line//g" input
done

其中inputfile包含要删除的单词 和输入是您要从

中删除它们的文件

答案 1 :(得分:0)

简单地

while read word; do
    sed "s/$word//g" input > output    # Output to other file
done < words_file

while read word; do
    sed -i "s/$word//g" input          # In place edit
done < words_file

答案 2 :(得分:0)

我最好去awk执行此任务:

awk 'FNR==NR {words[$1]; next}
     {for (i=1;i<=NF;i++) if ($i in a) $i=""}1'
     words input

使用您的文件:

$ awk 'FNR==NR {words[$1]; next} {for (i=1;i<=NF;i++) if ($i in words) $i=""}1' words input
I  new  shell script,so I need you help ,thank you

这将读取words文件中的所有单词并将其存储在数组words[]中。然后,它会遍历input中的行,并删除数组words[]中显示的单词。