2012-08-17 155 views
0

在另一個文件中存在同一行時,如何刪除一個文件中的行有很多示例。我已經通讀了他們,如果全行匹配,他們全部刪除。例如:grep -vxF -f file1 file2Bash,Linux,需要根據來自另一個文件的匹配內容從一個文件中刪除行

我有什麼不同。我有我的網站和我的客戶網站的網址列表。當域名與其他文件中的域名匹配時,我想從該文件中刪除行。

所以第一個文件可能看起來像:

http://www.site1.com/some/path 
http://www.site2.com/some/path 
http://www.site3.com/some/path 
http://www.site4.com/some/path 

第二個文件可能是:

site2.com 
www.site4.com 

我想輸出是:

http://www.site1.com/some/path 
http://www.site3.com/some/path 

回答

2

你有太多許多grep標誌。具體來說:-x將阻止你獲得你想要的結果。

假設文件1有圖案,並文件2有網址,只需使用:

grep -v -f file1 file2 

-x標誌將讓你得到你想要的結果:使用-x表示:比賽只針對整條線路,即只有線路完全匹配時才匹配線路,例如site2.com

man grep

-x,--line,正則表達式

只選擇那些比賽,整個線完全匹配。

1

可能有一些角落情況下,這種不處理,但你完全可以使用的grep-v-f選項:

grep -f file2.txt -v file1.txt 
0

以下應工作(未經測試):

#!/usr/bin/perl 

use strict; 

open my $fh, "<$ARGV[1]" || die $!; 

my $filter=join "|", <$fh>; 

close $fh; 

open $fh, "<$ARGV[0]" || die $!; 

print grep !m{^http://[^/]*($filter)/}x, <$fh>; 

close $fh; 
相關問題