Bash 每次迭代调用sed命令的Shell循环

Bash 每次迭代调用sed命令的Shell循环,bash,shell,sed,Bash,Shell,Sed,我想使用sed来处理文件中的一堆实例 如果说我有一个名为find的文件 ,cat ,dog ,rat 我有一个文件数据 1,dog,bird,cat,rat 2,cat,dog 3,bernie,cat,rat 通过运行这个命令,我想得到一个文件(我称之为NotFound),比如 现在我想我可以用下面的方式来做,但我知道这是不对的 while read p; do cat data | sed "s/$p//g" > NotFound done < found

我想使用sed来处理文件中的一堆实例 如果说我有一个名为find的文件

,cat
,dog
,rat
我有一个文件数据

1,dog,bird,cat,rat
2,cat,dog
3,bernie,cat,rat
通过运行这个命令,我想得到一个文件(我称之为NotFound),比如

现在我想我可以用下面的方式来做,但我知道这是不对的

while read p; do
        cat data | sed "s/$p//g" > NotFound
done < found
读取p时
;做
cat数据| sed“s/$p//g”>未找到
完成<发现

内联编辑
sed
在这里很方便,因为您将为找到的
文件中的每一行不断修改相同的文件:

while read -r p; do 
    sed -i "s/$p//g" data
done < found

# check output

cat data
1,bird
2
3,bernie
读取时-rp;做
sed-i“s/$p//g”数据
完成<发现
#检查输出
cat数据
1、小鸟
2.
3,伯尼

在shell中循环是一种低效的方法。我想推荐如下:

sed 's/^/s|/;s/$/||g/' found | sed -f - data > notfound
换句话说,将模式转换为单个
sed
程序,并针对数据文件运行它

sed 's/^/s|/;s/$/||g/' found | sed -f - data > notfound