首页 > 解决方案 > 如何修改 git log pretty 格式以从其中一个字段中删除某些字符(如逗号)?

问题描述

我有一个 bash 脚本,它使用 git 日志为一些存储库中的一组子目录创建一个 CSV 文件,使用 git log 的 --pretty 格式将每个提交放在一行中,其中包含我的脚本中的一些变量以及一些内置选项。

我使用的 --pretty 的基本格式如下:

git log --pretty="$PWD,${current_dir},%h,%cs,%cN,%s" 

在 bash 脚本中,整行如下所示:

(git log --no-merges --after="${number_of_days} days ago" --pretty="$PWD,${current_dir},%h,%cs,%cN,%s" -- "$current_dir") >> "$starting_dir"/export.csv

以下是 CSV 的示例:

/path/to/parent,./NameOfSubdirectory,bdacd7e,2021-03-24,kclemson,commit message,with,extra,commas,in it
/path/to/parent,./NameOfSubdirectory,45cb4a0,2021-03-24,kclemson,commit message foo
/path/to/parent,./NameOfSubdirectory,9f8294b,2021-03-24,kclemson,commit message bar
/path/to/parent,./NameOfSubdirectory,3e91e92,2021-03-24,kclemson,commit message baz

这在大多数情况下都可以正常工作,但是当在 Excel 中打开 CSV 时,%s 中的逗号当然会破坏格式。我想让它做的是用空格替换 %s 中的任何逗号,所以它看起来像这样:

/path/to/parent,./NameOfSubdirectory,bdacd7e,2021-03-24,kclemson,commit message with extra commas in it
/path/to/parent,./NameOfSubdirectory,45cb4a0,2021-03-24,kclemson,commit message foo
/path/to/parent,./NameOfSubdirectory,9f8294b,2021-03-24,kclemson,commit message bar
/path/to/parent,./NameOfSubdirectory,3e91e92,2021-03-24,kclemson,commit message baz

这样做的正确方法是什么?我假设我需要将它传递给 sed,但我正在寻求有关 sed 语法的帮助,以便在该字段中将“”换成“”,以及如何在 bash 脚本中执行此操作。

谢谢。

标签: bashgitsed

解决方案


而不是,使用其他不太可能出现在主题中的分隔符,例如^^^. 先替换,为空格,然后替换^^^,.

git log --pretty="$PWD^^^${current_dir}^^^%h^^^%cs^^^%cN^^^%s" | \
    sed -e 's/,/ /g' | sed -e 's/\^^^/,/g'

推荐阅读