2016-12-19 9 views
1
foo.c

файла:игнорировать шаблон с обратными косыми чертами в команде дифф

do {                
    a=b; 
    c=d; 
} while (0) 

Файл bar.c

do {                
    a=b; 
    c=d; 
\ 
} while (0) 

В сценарии оболочки разна из выше 2 файла:

diff foo.c bar.c

< } while (0) 
--- 
>  \ 
> } while (0) 

Я пытаюсь игнорировать этот диф используя

диф -I "REG-ех шаблон".

Я пробовал шаблон как "\s}\swhile\s(0)", "} while (0)" и т. Д. Но не использовать. Можно ли игнорировать описанный выше случай? Если не «diff», любая другая утилита?

ответ

0

Вы можете сделать это, удалив ненужные строки с помощью sed. И затем игнорируя различия.

У вас есть 2 различия между foo.c и bar.c

  1. линия с \
  2. Существует пробел перед } в foo.c

Вы можете сделать что-то вроде этого :

diff -I '\s\?}' <(sed '/^\\/d' bar.c) foo.c 

Удалить строку с помощью \ использованием СЭД и игнорировать пространство в foo.c

0

Попробуйте это:

pat='^[[:space:]]*\\[[:space:]]*$' 
sub_pat='s/'"$pat"'//' 
diff -B -I "$pat" <(sed -e "$sub_pat" foo.c) <(sed -e "$sub_pat" bar.c) 

Первая строка хранит регулярное выражение в pat переменную для следующих diff и sed команд. Регулярное выражение соответствует строке с обратной косой чертой (\\), опционально окруженной пробелами.

В sed команды заменить строки, соответствующие $pat модели с пустыми строками (-Bdiff опция заставляет игнорировать пустые строки).


невозможно отфильтровать обратный слэш с выхода diff без дополнительных инструментов, если только разница не в строках, содержащих шаблон игнорируются:

для каждого неигнорируемого изменения, ` diff "распечатывает полный набор изменений в его окрестности, в том числе и неосведомленные.

Подробнее см. Ответы на вопросы this question.

Смежные вопросы