因此,自从 GitHub 删除了非高级帐户的洞察选项卡后,我便尝试每天在本地列出我的 git 存储库中的插入和删除内容。
我想出了这种打印我想要的内容的方法:
git log --pretty="@%ad" --date=short --shortstat | tr "\n" " " | tr "@" "\n"
这会产生这种输出:
2024-06-13 7 files changed, 400 insertions(+), 406 deletions(-)
2024-06-12 3 files changed, 145 insertions(+)
2024-06-12 5 files changed, 638 deletions(-)
2024-06-12 1 file changed, 1 insertion(+), 1 deletion(-)
注意文件、插入和删除中的复数形式。另一个问题是提交可能没有插入或删除(或两者兼有,但我们忽略这种情况)。
我已经快完成了,我只需要提取日期、插入和删除并按日期分组。这将生成某种“每天完成的工作”图表。
我制作了这个正则表达式来捕获处理所有可选项的字段:
/^([0-9]{4}-[0-9]{2}-[0-9]{2})\s{3}[0-9]+\sfile(s)?\schanged,\s(([0-9]+)\sinsertion(s)?\(\+\))?(,\s)?(([0-9]+)\sdeletion(s)?\(\-\))?\s$/gm
现在我需要获取第 1、第 4 和第 8 组,例如sed
:
echo "2024-06-13 7 files changed, 400 insertions(+), 406 deletions(-) " |
sed -r 's/^([0-9]{4}-[0-9]{2}-[0-9]{2})\s{3}[0-9]+\sfile(s)?\schanged,\s(([0-9]+)\sinsertion(s)?\(\+\))?(,\s)?(([0-9]+)\sdeletion(s)?\(\-\))?\s$/\1 \4 \8/gm'
这样就能产生正确的输出:
2024-06-13 400 406
但是如果输入字符串没有插入或删除,sed 就不会为该捕获组打印任何内容。例如:
2024-06-13 400
我无法判断单个数字是插入还是删除。
有没有办法从每一行中提取组,但如果组不存在则打印“0”作为占位符?(不一定单独使用 sed,也不一定在单个命令中)。