Ответ 1
diff
, а затем grep
для нужного типа редактирования.
diff -u A1 A2 | grep -E "^\+"
У меня есть два файла A1 и A2 (unsorted). A1 - это предыдущая версия A2, и некоторые строки были добавлены к A2. Как я могу получить новые строки, добавленные в A2?
Примечание. Я просто хочу, чтобы новые строки добавлены и не нужны строки, которые были в A1, но удалены в A2. Когда я делаю diff A1 A2
, я получаю дополнения и удаления, но хочу только добавления.
Пожалуйста, предложите способ сделать это.
diff
, а затем grep
для нужного типа редактирования.
diff -u A1 A2 | grep -E "^\+"
Все приведенное ниже копируется непосредственно из @TomOnTime serverfault answer здесь:
Показать строки, которые существуют только в файле a: (то есть, что было удалено из a)
comm -23 a b
Показать строки, которые существуют только в файле b: (то есть, что было добавлено в b)
comm -13 a b
Показать строки, которые существуют только в одном файле: (но не оба)
comm -3 a b | sed 's/^\t//'
(Предупреждение: если файл a
имеет строки, начинающиеся с TAB, он (первая TAB) будет удаляться из вывода.)
ПРИМЕЧАНИЕ. Оба файла должны быть отсортированы для правильной работы "comm". Если они еще не отсортированы, вы должны отсортировать их:
sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted
Если файлы чрезвычайно длинные, это может быть довольно тяжелым бременем, поскольку для этого требуется дополнительная копия и, следовательно, вдвое больший объем дискового пространства.
Изменить: обратите внимание, что команда может быть написана более кратко с помощью замены процесса (благодаря @phk для комментария):
comm -12 <(sort < a) <(sort < b)
Вы можете попробовать это
diff --changed-group-format='%>' --unchanged-group-format='' A1 A2
Опции документированы в man diff
:
--GTYPE-group-format=GFMT
format GTYPE input groups with GFMT
а также:
LTYPE is 'old', 'new', or 'unchanged'.
GTYPE is LTYPE or 'changed'.
а также:
GFMT (only) may contain:
%< lines from FILE1
%> lines from FILE2
[...]
Простой метод заключается в использовании:
sdiff A1 A2
Другой способ - использовать comm
, как вы можете видеть в Сравнении двух несортированных списков в linux, перечисляя уникальные во втором файле.
Вы можете ввести:
grep -v -f A1 A2
git diff path/file.css | grep -E "^\+" | grep -v '+++ b/' | cut -c 2-
grep -E "^\+"
из предыдущего принятого ответа, он неполный, потому что оставляет не исходный материал.grep -v '+++ b'
удаляет неиспользуемую строку с именем файла более поздней версииcut -c 2-
удаляет столбец знаков +
, также может использовать sed 's/^\+//'
comm
или sdiff
не были опцией из-за git.
Подобный подход к merp, но, надеюсь, более понятный и легко настраиваемый:
diff \
--new-line-format="- %L" \
--old-line-format="" \
--unchanged-line-format="" \
A1 A2