0

同じ行が別のファイルに存在する場合に、あるファイルの行を削除する方法については、多くの例があります。私はそれらを読みましたが、完全な行が一致する場合はすべて削除されます。例:grep -vxF -f file1 file2

私が持っているものは少し異なります。私の Web サイトとクライアントの Web サイトの URL のリストがあります。ドメインが別のファイルのドメインと一致する場合、そのファイルから行を削除したいと考えています。

したがって、最初のファイルは次のようになります。

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

2 番目のファイルは次のようになります。

site2.com
www.site4.com

出力を次のようにしたいと思います。

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

3 に答える 3

2

grepフラグが多すぎます。具体的には:-x希望する結果が得られないようにします。

file1にパターンがあり、file2にURLがあるとすると次を使用します。

grep -v -f file1 file2

フラグを使用すると、目的の-x結果が得られなくなります。使用-x手段:行全体に対してのみ一致します。つまり、行が正確に一致する場合にのみ一致します(例:site2.com)

からman grep

-x、-line-regexp

行全体に完全に一致する一致のみを選択します。

于 2012-08-17T18:22:47.247 に答える
1

これが処理できないいくつかのコーナーケースがあるかもしれませんが、あなたは単に-v-fのオプションを使うことができますgrep

grep -f file2.txt -v file1.txt
于 2012-08-17T18:22:57.153 に答える
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;
于 2012-08-17T18:27:26.450 に答える