Обратный grep с использованием файла шаблона не показывает несовпадения

Обратный grep с использованием файла шаблона не показывает несовпадения

У меня есть два почти одинаковых файла,"фу" и "бар".

Каждый файл содержит тысячи строк, по одному числу в каждой строке.

Если я sortи затем diffоба файла, то вот результат:

$ diff foo bar
5984a5985,5986
> 15676
> 15677
7703,7706d7704
< 17486
< 17487
< 17488
< 17489

Однако если я подам grep -Fvfоба файла, то получу ноль «несовпадений» в обоих направлениях:

$ grep -Fvf foo bar
$ grep -Fvf bar foo
$

Почему так? Разве я не должен получать результаты, похожие на diff? Я бы ожидал, что первая команда вернет мне "первую половину" значений в diff, а вторая команда grep вернет мне остальное.

Почему я не получаю ожидаемых результатов?

решение1

В diffотличие от grep -Fvf,порядок появления строк имеет значение. Кроме того, поскольку -xопция не была включена в команду grep, строки с одним толькочастичные совпаденияисключаются из вывода.

Воспроизводимый пример

Рассмотрим эти два файла:

$ cat foo
156
174
15676
17486
17487
$ cat bar
15677
15678
156
174
15676

Команда diffпоказывает, что они различны, но grepкоманды не выводят никаких данных:

$ diff foo bar
0a1,2
> 15677
> 15678
4,5d5
< 17486
< 17487
$ grep -Fvf foo bar; grep -Fvf bar foo

Если бы мы добавили -xтребование соответствия полной строке, то grep выдал бы:

$ grep -Fvxf foo bar
15677
15678
$ grep -Fvxf bar foo
17486
17487

Дополнительное предложение

Какаблигпредложения в комментариях, diff -uсоздают больше контекста, который может сделать вывод более понятным.

Связанный контент