在git diff输出中搜索特定类型的更改

在git diff输出中搜索特定类型的更改,git,shell,ksh,Git,Shell,Ksh,我正在编写一个KornShell脚本,试图在文件的git diff结果中迭代特定的行。对于那些不知道的人,git diff列出了对文件所做的更改,其输出如下所示(假设只更改了第3行和第5行): 我已经将这个结果存储在一个字符串变量中(比如,diff),我需要迭代diff中的每一行,从+或-开始(例如,-第3行的早期版本)。最直观的解决方案显然是迭代diff中的每一行,如果行包含+或-,则使用类似,但我不能这样做,因为diff不是一个单独行的数组,而是一个在某些位置由\n分隔的字符串 因此,我最终

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

我已经将这个结果存储在一个字符串变量中(比如,
diff
),我需要迭代
diff
中的每一行,从
+
-
开始(例如,
-第3行的早期版本
)。最直观的解决方案显然是迭代
diff
中的每一行,如果行包含+或-,则使用类似
,但我不能这样做,因为
diff
不是一个单独行的数组,而是一个在某些位置由
\n
分隔的字符串

因此,我最终要寻找的是一种提取两个
\n
字符之间字符串的每个部分的方法


我如何在Korn shell中实现这一点?或者你们可以建议更好的选择。

下面的方法应该适合

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
找到了模拟器

,您在此中未能标记
korn
。。顺便说一句,一个疑问。KornShell不支持类似bash的数组吗?@sjsam korn在我搜索它时不会显示为标记。它一直到昨天才出现。korn确实支持数组。您是否建议我提取两个
\n
字符之间的结果的每个部分并将其移动到数组中?我认为您不需要提取它。始终可以在数组运算符中执行命令替换。关于korn标签,很抱歉,请添加korn shell标签appropriately@yacc当我今天搜索korn时,它没有显示为标签。事实上,ksh也没有为我显示。
diff=($(git diff))
似乎已经将git diff结果的每个部分由任何空格字符分隔成数组的一个单独元素。因此当前
未更改
1
都是数组的独立元素。我希望将每一行作为数组中的一个单独元素。@lebowski:我确实注意到了这一点,而这并不是你想要的。所以请看编辑…@lebowski,不客气。我也添加了
grep
来过滤结果。。请参见最终编辑。
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