替换文件中与另一个文件中的模式匹配的行

时间:2013-06-20 19:08:52

标签: regex perl sed awk pattern-matching

我正在写一个剧本,但此刻在我的脑海里画了空白。

基本上,我有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中的任何内容都应该在2.txt中消除,因此在处理后2.txt看起来应该是

4.4.4.4
5.5.5.5

尝试使用脚本

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

任何人都可以给我一些指示?

5 个答案:

答案 0 :(得分:3)

GNU

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

答案 1 :(得分:3)

您可以单独使用grep

grep -wv -f 1.txt 2.txt

答案 2 :(得分:1)

遍历1.txt并存储所有值。然后遍历2.txt的行,如果任何值与1.txt中的任何值匹配,则不存储这些值。仅存储2.txt中与1.txt。

不匹配的值

答案 3 :(得分:1)

这个awk 1-liner应该做的工作:

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

答案 4 :(得分:0)

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