У мене два файли конфігурації, оригінал від менеджера пакунків та індивідуальний модифікований я. Я додав кілька коментарів, щоб описати поведінку.
Як я можу запускати diff
файли конфігурації, пропускаючи коментарі? Коментований рядок визначається:
- необов'язковий провідний пробіл (вкладки та пробіли)
- хеш-знак (
#
) - будь-який інший персонаж
Найпростіший регулярний вираз, який пропускає першу вимогу, був би #.*
. Я спробував --ignore-matching-lines=RE
( -I RE
) варіант GNU diff 3.0, але я не міг змусити його працювати з цим RE. Я також спробував .*#.*
і .*\#.*
без везіння. Буквально ставлячи рядок ( Port 631
) так, що RE
нічого не відповідає, а також не допомагає поставити RE між косими рисами.
Як запропоновано в інструменті "diff", аромат регексу здається відсутнім? , Я спробував grep -G
:
grep -G '#.*' file
Здається, це відповідає коментарям, але це не працює diff -I '#.*' file1 file2
.
Отже, як слід використовувати цей варіант? Як я можу змусити diff
пропустити певні рядки (у моєму випадку коментарі)? Будь ласка, не grep
пропонуйте використовувати файл та порівнювати тимчасові файли.
diff -I
він не веде себе так, як я очікував. Я оновив свою відповідь прикладом, який пояснив цю поведінку для мене.
-I
параметр спричиняє ігнорування блоку лише у тому випадку, якщо всі його рядки відповідають регулярному вираженню. Таким чином, ви можете ігнорувати зміни лише для коментарів таким чином, але не зміни коментарів, що знаходяться поруч із зміною без коментарів.