Почему 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 (посмотрим на мой комментарий к ответу), и, похоже, он работает, но для некоторых нескольких файлов я заметил странное поведение, показанное выше.

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)
  • заменяя содержимое одного файла другим
  • Посетители, посетившие / стр. 1, а также / стр. 2
  • Как найти файлы, содержащие две строки в разных строках
  • Как grep / print значение ключа в json, которое хранится в переменной?
  • Проблема с grep -o regex
  • Копирование файлов, содержащих определенную структуру сохранения текста
  • Как взять список и удалить его из файла?
  • Удалить имя файла при рекурсивном подсчете числа вхождений шаблона
  • Необходимые команды для grep Неизвестное количество строк перед поиском строки поиска в файлах
  • извлечь столбец из большого текстового файла
  • Как читать полное руководство «grep»?
  • Как использовать grep для поиска только в первой строке файлов для определенной строки?
  • Linux и Unix - лучшая ОС в мире.