Я хотел бы получить (GNU) DIFF для распечатки только строк, которые отличаются в одном файле. Так дано
==> diffa.txt <==
line1
line2 - in a only
line3
line4 changed
line5
==> diffb.txt <==
line1
line3
line4 changed in b
line5
line6 in b only
я хотел бы diff --someoption diffa.txt diffb.txt
произвести
line2 - in a only
line4 changed
Следующее выглядит так, как будто это должно быть полезно, но немного загадочно:
--GTYPE-group-format=GFMT
Similar, but format GTYPE input groups with GFMT.
--line-format=LFMT
Similar, but format all input lines with LFMT.
--LTYPE-line-format=LFMT
Similar, but format LTYPE input lines with LFMT.
LTYPE is `old', `new', or `unchanged'.
GTYPE is LTYPE or `changed'.
GFMT may contain:
%< lines from FILE1
%> lines from FILE2
Ответы:
Не уверен, что
diff
один может сделать это, но вы всегда можете использовать мощь других утилит GNU, чтобы помочь вам.Он выполняет diff, затем выбирает только те строки, которые начинаются с '-' - они изменены и имеют значения из файла diffa.txt, а затем
sed
просто удаляют эти символы '-'.Изменить: После нескольких экспериментов
diff
, похоже, что команда ниже производит то, что вы хотите:источник
--changed-group-format='%<'
делают для меня сейчас ...Более простой способ - использовать
comm
утилиту linux (для ввода требуется отсортированный файл). Он пишет в стандартный вывод:строки, которые являются уникальными для diffa.txt
строки, которые уникальны для diffb.txt
линии, которые являются общими
и вы можете подавить каждый из них с помощью параметра 1,2 или 3 соответственно. Так что в вашем случае это будет выглядеть так:
comm -23 diffa.txt diffb.txt
Он подавляет строки, которые являются уникальными для diffb.txt, строки, которые являются общими, и выводит строки, которые являются уникальными только для diffa.txt.
Источник: https://www.tutorialspoint.com/unix_commands/comm.htm
источник
diff
то, что я делаю не так, как ожидал. И я считаю, что он предустановлен как на BSD (то есть Mac OS X), так и на Ubuntu, так что никаких проблем с диспетчером пакетов не возникает.Я хотел бы отметить, что
comm
ожидает отсортированные входные файлы и, следовательно, сообщает о результатах, отличных отdiff
.универсален. Слава @vava
источник