Как отфильтровать только те строки, которые изменены в формате контекста 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; }"
Это напечатает все между***
'(включено) и'---
' (не входит)