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