Как различать 2 файла с опцией игнорировать совпадающие строки с помощью команды diff

#linux #bash #shell #diff

Вопрос:

У меня есть 2 файла, в которых есть определенная строка, которая не совпадает с другим файлом. Мне нужно игнорировать эту разницу с помощью diff -I RE <file1> <file2> команды.

Я нашел это у man diff

    -I RE  --ignore-matching-lines=RE
          Ignore changes whose lines all match RE.
 

$кошка 1.txt

 MY_WORD
temp
abc
 

$кошка 2.txt

 YOUR_WORD
temp
abc
 

$diff -Я МОЕ СЛОВО 1.txt 2.txt

 1c1
< MY_WORD
---
> YOUR_WORD
4d3
< 
 

Может кто-нибудь помочь мне понять, почему это не работает? diff здесь не должно было быть никаких изменений.

Комментарии:

1. Почему бы и нет? MY_WORD есть только в одном из файлов. Ignore changes whose lines **all** match RE.

2. Что мне делать, если мне нужно проигнорировать определенное слово в 2 файлах?

3. Смотрите мой ответ …

4. Смотрите также Как отличать файлы, игнорируя комментарии (строки, начинающиеся с #)? — Обмен стеками Unix и Linux

Ответ №1:

Попробуй

 diff -I ".*_WORD" 1.txt 2.txt
 

К сожалению, diff, похоже, понимает только базовое разрешение, поэтому предпочитаемый

 diff -I "(MY|YOUR)_WORD" 1.txt 2.txt
 

не работает =(

РЕДАКТИРОВАТЬ: И вот что я получаю с вашими образцами и моим вызовом (а также несоответствующим RE-там нет ведущего места):

 cat 1.txt 2.txt 
MY_WORD
temp
abc
YOUR_WORD
temp
abc
diff -I ".*_WORD" 1.txt 2.txt
diff -I " .*_WORD" 1.txt 2.txt
1c1
< MY_WORD
---
> YOUR_WORD
 

Комментарии:

1. Он по-прежнему возвращает 4d3 < вывод

2. это означает, что в одном из ваших реальных файлов есть пустая строка, которой нет в другом.