Как отфильтровать только те строки, которые изменены в формате контекста git

Я использую следующую команду для определения количества строк, которые были изменены между 2 коммитами. b26e..и e1f5... это хеши коммитов

git difftool -y -x "diff -c" b26ea5c511970d0211186c3b1e119224465ad365 e2f5104a2dd1afdc27803ead58b74cfd18ae50be

ниже вывод файла

*** /tmp/n90Z9a_Testing.txt 2016-12-02 11:47:59.027168926 +0530
--- /tmp/19ymab_Testing.txt 2016-12-02 11:47:59.027168926 +0530
***************
*** 1,3 ****
  initial commit
  added new line
! added for modification
--- 1,5 ----
  initial commit
  added new line
! added for modification, this is modified.This is modified again
! after modifiying for the second time, this line is added
! This line added for complete deletion and then replace with another

из этого мне нужно отфильтровать только те строки, которые были изменены с первого коммита, простыми словами мне нужно отфильтровать только эту часть из вышеприведенного вывода

*** /tmp/n90Z9a_Testing.txt 2016-12-02 11:47:59.027168926 +0530
--- /tmp/19ymab_Testing.txt 2016-12-02 11:47:59.027168926 +0530
***************
*** 1,3 ****
  initial commit
  added new line
! added for modification

Как я могу отфильтровать это, спасибо заранее

2 ответа

Решение

Попробуй это

git difftool -y -x "diff -c" <commitHash1> <commithash2> | awk '/\*\*\*/{flag=1}/---/{print;flag=0}flag'

Чтобы увидеть больше примеров выбора линий между двумя шаблонами маркеров с awk увидеть это

Если речь идет только о выборе линий между двумя маркерами, вы можете использовать sed:

sed -n -e "/^\*\*\*/,/^---/{ /^---/d; p; }"

То есть:

git difftool -y -x "diff -c" <shaX> <shaY> | sed -n -e "/^\*\*\*/,/^---/{ /^---/d; p; }"

Это напечатает все между***'(включено) и'---' (не входит)

Другие вопросы по тегам