如何在下一个sed命令中使用管道的结果?

时间:2012-09-26 17:21:22

标签: sed

我想用sed来做这件事。我有2个文件:

keys.txt:
host1
host2

test.txt
host1 abc
host2 cdf
host3 abaasdf

我想使用sed删除test.txt中包含keys.txt中关键字的所有行。所以test.txt的结果应该是

host3 abaasdf

有人可以告诉我如何用sed做到这一点吗?

谢谢,

3 个答案:

答案 0 :(得分:2)

我建议您使用grep(尤其是fgrep,因为不涉及正则表达式),所以

fgrep -v -f keys.txt test.txt 

没关系。快速使用sed

sed -i.ORIGKEYS.txt ^-e 's_^_/_' -e 's_$_/d_' keys.txt
sed -f keys.txt test.txt

(这会将原始keys.txt - 备份 - 修改为可源的sed脚本。)

答案 1 :(得分:2)

fgrep -v -f是最佳解决方案。以下是几种选择:

commjoin

的组合
comm -13 <(join keys.txt test.txt) test.txt

或awk

awk 'NR==FNR {key[$1]; next} $1 in key {next} 1' keys.txt test.txt

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed 's|.*|/^&\\>/d|' keys.txt | sed -f - test.txt