我想将文件的cat输出pip到sed模式。 假设我有2个文件:color.txt和duplicate.txt。 color.txt包含3种颜色:蓝色,绿色,红色和duplicate.txt包含绿色。 我想用sed从color.txt文件中删除绿色。
我尝试这样的事情:
cat duplicate.txt | sed "/$/d" < color.txt
不幸的是,它不起作用。有什么建议怎么做?
答案 0 :(得分:2)
您可以使用grep
来实现您的目标:
grep -Fxvf duplicate.txt color.txt
-F
将duplicate.txt中的行视为字符串而不是模式-x
匹配color.txt -v
提取不匹配的行-f
从duplicate.txt中获取字符串以匹配color.txt 无论您的文件有多少图案,这都可以。对于非常大的文件,您可能需要查看此帖子:
答案 1 :(得分:2)
虽然在这种情况下grep
解决方案已经足够,但有时候我会使用这样的命令:
sed 's|.*|/^\1$/d|' duplicate.txt | sed -i -f - color.txt
此处,第一个sed
调用将每行从duplicate.txt转换为正确的sed
命令,以准确删除所需内容。这会生成sed
脚本,然后使用sed
将其传递给第二个-f -
,其中-
文件名表示标准输入。
答案 2 :(得分:0)
我认为你的意思是:
sed "/$(cat duplicate.txt)/d" color.txt
但是,正如您从评论中可以看出的那样,这种方法并不可取。我劝你使用其他解决方案之一。我不会删除这个答案,因为它确实显示了你想要学习的技术。