我想用sed来做这件事。我有2个文件:
keys.txt:
host1
host2
test.txt
host1 abc
host2 cdf
host3 abaasdf
我想使用sed删除test.txt中包含keys.txt中关键字的所有行。所以test.txt的结果应该是
host3 abaasdf
有人可以告诉我如何用sed做到这一点吗?
谢谢,
答案 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
是最佳解决方案。以下是几种选择:
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