AIX 5.3 diff не считает \r
пробелом. Смотрите следующую расшифровку:
/home/pax: od -c file1
0000000 h e l l o \n t h e r e \n
0000014
/home/pax: od -c file2
0000000 h e l l o \r \n t h e r e \r \n
0000016
/home/pax: od -c file3
0000000 h e l l o \n t h e r e \n
0000016
/home/pax: od -c file4
0000000 h e l l o \t \n t h e r e \t \n
0000016
/home/pax: diff -b file1 file2
1,2c1,2
< hello
< there
---
> hello
> there
/home/pax: diff -b file1 file3
<<No output>>
/home/pax: diff -b file1 file4
<<No output>>
Справочная страница для diff
немного тупая по этому вопросу, заявляя, что -b
"заставит любое количество пробелов в конце строки обрабатываться как один символ новой строки ...", но делает на самом деле не определяет то, что он считает пробелом.
Исходя из вышеприведенного стенограммы, я понял бы, что пробелы и табуляции в порядке, но возврат каретки - нет.
Одним из способов обойти это будет удаление каретки самостоятельно с помощью скрипта, подобного:
#!/usr/bin/ksh
# crdiff: diffs two files after changing \r\n to \n in both.
if [[ $# -ne 2 ]] ; then
echo 'Usage: crdiff <file> <file2>'
return 1
fi
perl -pne 's/\r$//' $1 >/tmp/xyzzy_$$_$1
perl -pne 's/\r$//' $2 >/tmp/xyzzy_$$_$2
diff -b /tmp/xyzzy_$$_$1 /tmp/xyzzy_$$_$2
rc=$?
rm -f /tmp/xyzzy_$$_$1 /tmp/xyzzy_$$_$2
return $rc
В качестве альтернативы, вы можете скомпилировать утилиту GNU diff
на вашем устройстве и вставить ее в путь до /usr/bin
- кажется, нет проблем с \r
в качестве пробела. Фактически, мы делаем именно это на наших AIX4-боксах, поскольку diff
даже не претендует на поддержку для поддержки опции -b
.