搜索git diff输出以获取特定类型的更改

时间:2017-11-29 19:47:21

标签: git shell ksh

我正在编写一个Korn Shell脚本,我试图迭代文件的git diff结果中的特定行。对于那些不知道的人,git diff列出了对文件所做的更改,其输出看起来像这样(假设只更改了第3行和第5行):

unchanged line 1
unchanged line 2
- previous version of line 3
+ new version of line 3 
unchanged line 4
- previous version of line 5
+ new version of line 5 

我已将此结果存储在字符串变量中(例如,diff),我需要以diff+开头迭代-中的每一行(例如,- previous version of line 3)。最直观的解决方案显然是迭代diff中的每一行并使用if line contains + or -之类的内容,但我不能这样做,因为diff不是一个单独的行数组,而是在地方以\n分隔的字符串。

所以我最终要找的是一种在两个\n个字符之间提取字符串的每个部分的方法。

如何在Korn shell中实现这一目标?或者也许你们可以提出更好的选择。

1 个答案:

答案 0 :(得分:1)

以下方法应该适合

git diff | grep '^[+-]' |  while read -r -d$'\n' line
do 
if [ ! -z "$line" ] 
# The last line would always be empty, but cond. above is an overkill anyway
then
 # Do something useful with "$line"
fi    
done

由于您需要以+-开头的行,我还添加了grep来过滤行。

注意:使用了ksh 93u+ 2012-08-01仿真器[ here ]