Вопрос по bash, linux, grep – Bash, Linux, необходимо удалить строки из одного файла на основе соответствия содержимого из другого файла

0

Есть много примеров того, как удалить строки в одном файле, если эта же строка существует в другом файле. Я прочитал их, и все они удаляются, если полная строка совпадает. Примеры как:grep -vxF -f file1 file2

Что у меня немного отличается. У меня есть список 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

Второй файл может быть:

site2.com
www.site4.com

Я хотел бы вывод:

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

Ваш Ответ

3   ответа
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;
2

grep флаги. В частности:-x не даст вам желаемых результатов.

При условии, чтоfile1 имеет шаблоны, иfile2 имеет URL-адреса, просто используйте:

grep -v -f file1 file2

-x flag не даст вам получить желаемые результаты: используя-x означает: сопоставлять только со всей строкой, то есть сопоставлять только строку, если линия точно, например,site2.com.

Отman grep:

-x, --line-regexp

Select only those matches that exactly match the whole line.

1

которые не обрабатываются, но вы можете просто использовать-v а также-f вариантыgrep:

grep -f file2.txt -v file1.txt

Похожие вопросы