2013-06-20 78 views
1

我正在編寫一個腳本,但此刻在我頭腦中繪製空白。替換文件中與另一個文件中的模式匹配的行

所以基本上,我有1.txt,裏面有一堆像IP地址的:

1.1.1.1 
2.2.2.2 
3.3.3.3 

而且我也有另外一個文件2.txt,其中有這樣的事情:

1.1.1.1 
2.2.2.2 
3.3.3.3 bad ip 
4.4.4.4 
5.5.5.5 

任何東西1.txt應在0​​中消除,因此經過處理後,2.txt應該看起來像

4.4.4.4 
5.5.5.5 

一片空白,試圖使用該腳本

while line in `cat 2.txt` 
sed -i 's/"$line"//g' 2.txt 

任何人都可以給我一些指點?

回答

3

GNU

sed -r 's#(.*)#/\1/d#' file1 | sed -f - file2 
+0

這是偉大的,但是有沒有什麼辦法可以消除這條線,而不是用空行代替它? – Tony

+1

愚蠢的問題,它已經被淘汰......謝謝! – Tony

1

遍歷1.txt並存儲所有值。然後迭代2.txt行,如果任何值匹配1.txt中的任何值,則不要存儲這些值。只存儲2.txt中與1.txt中不匹配的值。

0
awk 'NR==FNR{a[$0]++;next}{for(x in a) if(index($0,x)>0) next}1' file{1,2} 
1

這AWK 1班輪應該做的工作:

awk 'NR==FNR {a[$1];next} !($1 in a)' {1,2}.txt 
3

在這裏,您可以單獨使用grep

grep -wv -f 1.txt 2.txt 
相關問題