2

我想用 sed 来做到这一点。我有 2 个文件:

keys.txt:
host1
host2

test.txt
host1 abc
host2 cdf
host3 abaasdf

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

host3 abaasdf

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

谢谢,

4

3 回答 3

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 脚本。)

于 2012-09-26T18:35:17.800 回答
2

fgrep -v -f是最好的解决方案。这里有几个选择:

comm和的组合join

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
于 2012-09-26T20:25:55.817 回答
0

这可能对您有用(GNU sed):

sed 's|.*|/^&\\>/d|' keys.txt | sed -f - test.txt
于 2012-09-26T22:06:20.900 回答