2014-09-24 66 views
-1

我有两个文件。我想删除所有来自log.txt的字符串(在url.txt)使用sed删除包含多个字符串的所有行

第一个文件是url.txt

google.com 
bing.com 
yahoo.com 

第二个文件是log.txt的

1.2.3 www.google.com bot 
    626.7.7 www.yahoo.com browser 
    35.5.6 www.test.com search 
    44.6.6 www.bing.com web 

我想这样的输出:

35.5.6 www.test.com search 

此代码为一个字符串,但我想从log.txt的

删除所有字符串(在url.txt)
sed -i '/$string/d' log.txt 

回答

2
awk 'NR==FNR{urls["www."$1]; next} !($2 in urls)' url.txt log.txt 

以上将只匹配在特定的URL中的log.txt的

6

您可以使用此grep -v

grep -vwFf url.txt log.txt 
35.5.6 www.test.com search 
+1

这会错误地删除较长的URL(如果存在),例如如果log.txt包含“44.6.6 www.stabbing.com web”,它将与“bing.com”相匹配。您需要为grep添加'-w' arg。这仍然会给你带来一个问题,那就是它会错误地删除一行,比如'44.6.6 www.stabbing.com很高兴这不是bing.com',因为它在任何特定领域都不匹配,但这可能不是问题。 – 2014-09-25 02:28:01

+1

谢谢埃德,我在这个grep命令中添加了-w。 – anubhava 2014-09-25 03:35:35

+1

明白你的观点,但并不是说stabbing.com会被保留下来。他说“全部字符串”不限于根域。一个'bing.com.phising.to'(可能希望)被删除(但你保持你的+1; - D) – NeronLeVelu 2014-09-25 05:19:20

0

具体所需的字段扩展您的sed脚本,在这里是扩展脚本,通过url.txt中的每行解析并删除log.txt中的相应字符串

while read string 
do 
    sed -i '/$string/d' log.txt 
done < url.txt