如何管理cat到sed模式

时间:2017-09-13 18:30:39

标签: bash unix sed

我想将文件的cat输出pip到sed模式。 假设我有2个文件:color.txt和duplicate.txt。 color.txt包含3种颜色:蓝色,绿色,红色和duplicate.txt包含绿色。 我想用sed从color.txt文件中删除绿色。

我尝试这样的事情:

cat duplicate.txt | sed "/$/d" < color.txt

不幸的是,它不起作用。有什么建议怎么做?

3 个答案:

答案 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

但是,正如您从评论中可以看出的那样,这种方法并不可取。我劝你使用其他解决方案之一。我不会删除这个答案,因为它确实显示了你想要学习的技术。