Почему grep показывает разные результаты, когда я использую file1 как шаблон в файле2 и наоборот?

Когда я запускаю grep -m 1 -Fnxvf file1 file2 , для некоторых нескольких файлов я получаю другой номер строки, чем запуск grep -m 1 -Fnxvf file2 file1 ( grep -m 1 -Fnxvf file2 file1 files ).

Зачем?


Я уменьшил файлы до минимального примера.

file1

 Pp: 1 Id pezzo 193 posIn = { x = 132, y = 1432 } Pp: 1 Id pezzo 193 posIn = { x = 136, y = 1432 } Pp: 1 Id pezzo 193 posIn = { x = 84, y = 1436 } Pp: 1 Id pezzo 193 posIn = { x = 88, y = 1436 } 

file2

 Pp: 1 Id pezzo 193 posIn = { x = 132, y = 1432 } Pp: 1 Id pezzo 193 posIn = { x = 84, y = 1436 } Pp: 1 Id pezzo 193 posIn = { x = 88, y = 1436 } Pp: 1 Id pezzo 193 posIn = { x = 92, y = 1436 } 

Результаты:

 $ grep -m 1 -Fnaxvf file2 file1 2:Pp: 1 Id pezzo 193 posIn = { x = 136, y = 1432 } $ grep -m 1 -Fnaxvf file1 file2 4:Pp: 1 Id pezzo 193 posIn = { x = 92, y = 1436 } 

Первый результат – именно то, что я ожидаю, но во втором случае я ожидал увидеть (и обычно это так) вторую строку file2 .


Длительное объяснение

Я пытаюсь найти (и показать) первое различие между двумя файлами. Я хочу показать только первое различие и строку, где это происходит.

Я нашел этот ответ на SO (посмотрим на мой комментарий к ответу), и, похоже, он работает, но для некоторых нескольких файлов я заметил странное поведение, показанное выше.

  • разделить большой файл на новый файл с уникальными именами файлов
  • список выбираемых единиц для журнала
  • как сохранить часть строк в файле на основе информации во втором файле?
  • Как выбрать второй столбец после найденного шаблона, шаблоны - «100»,
  • Греп медленно выйдет после матча?
  • Найти, сочетание xargs и grep вызывает ошибку
  • Получить имя и использование файловой системы с помощью `df -h`
  • Как свернуть 'grep -c <токен> * .h * .cpp' в один счет?
  • One Solution collect form web for “Почему grep показывает разные результаты, когда я использую file1 как шаблон в файле2 и наоборот?”

    TLDR: у вас нет гарантии, что grep будет использовать ваш шаблон в порядке.

    Предположим, у вас есть два файла со следующим содержимым (по одной букве на строку, я складываю для удобства чтения)

    Файл 1

     ABDE 

    а также

    Файл 2

     ABCD 
    • Первый исключенный (поскольку вы используете -v) письмо из набора 2 (ABCD) в файле 1 является E.
    • Первое исключенное письмо из набора 1 в файле 2 – C.

    Сравнение файлов обычно:

    • cmp file1 file2 для двоичного файла, когда вам не нравится diff (вы даже можете использовать cmp -s (silent))
    • diff file1 file2 которые показывают псевдо-sed-код для перехода от file1 к файлу2 (diff file2 file1 довольно симметричен)
    • comm -123 file1 file2 чтобы показать общие строки (-3) в файле1 (-1) в файле2 (-2)
    Interesting Posts

    Как завершить скрипт оболочки?

    Использование «ps -C java -o pid, user, cmd» Можно ли уменьшить вывод cmd?

    Как скопировать структуру каталогов, но игнорировать символические ссылки?

    Символическая ссылка в виде user@hostname.6912: 144780xxxx

    sudo: разрешить одной команде устанавливать одну переменную среды

    SSH-соединение через SSH-туннель продолжает закрываться

    Как отключить «auto cd» в zsh с помощью oh-my-zsh

    Как удалить все, кроме определенной папки под родительской папкой

    mount iso image: сообщение «блочное устройство защищено от записи, установка только для чтения»!

    Не удалось восстановить файл с помощью extundelete

    Совместите все распределенные файлы в своем кластере

    Если «rm dir -r» удалил только частичное содержимое dir / dir1 /, не удалил ли он что-либо в каталоге dir / dir2 /?

    Gnome Shell: запуск скрипта оболочки после начала сеанса?

    За исключением команды kill или команды kill (pid, signal), что может вызвать SIGKILL для процесса?

    Перенаправление трафика вторичного сетевого интерфейса вместе с переадресацией портов на tun0 (OpenVPN) с использованием iptables

    Linux и Unix - лучшая ОС в мире.