Попросите git сравнить слова вместо строк с git diff HASH --word-diff
:
$ git diff HEAD^ --word-diff
diff --git a/file.txt b/file.txt
index 244f97f..ad2517e 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1 @@
hello my [-first-]{+last+} name is [-john-]{+doe+}
Передать вывод в grep
/ sed
/ awk
, чтобы извлечь фактические слова, окруженные {+
и +}
. Я сделал это с grep -oP
, где -P
включает регулярные выражения perl и -o
отображает только найденные части вместо полной строки:
$ git diff HEAD^ --word-diff |grep -oP '(?<=(\{\+)).+?(?=(\+\}))'
last
doe
Разбивка регулярных выражений:
(?<=(\{\+))
положительное предположение для {+
, поэтому эти символы необходимы для соответствия, но не включены в него .+?
ленивый поиск всех символов. Без лени будет жадно включать все между самыми первыми и самыми последними скобками: last+} name is [-john-]{+doe
(?=(\+\}))
позитивный прогноз для +}
, аналогичный прогнозу
Примечание: вывод не будет правильно включать +}
и любой следующий текст, если эти символы фактически являются частью ваших изменений.