Bash 每次迭代调用sed命令的Shell循环
我想使用sed来处理文件中的一堆实例 如果说我有一个名为find的文件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
,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