bash - 如何修改 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 脚本中执行此操作。
谢谢。
解决方案
而不是,
使用其他不太可能出现在主题中的分隔符,例如^^^
. 先替换,
为空格,然后替换^^^
为,
.
git log --pretty="$PWD^^^${current_dir}^^^%h^^^%cs^^^%cN^^^%s" | \
sed -e 's/,/ /g' | sed -e 's/\^^^/,/g'
推荐阅读
- python-3.x - NameError:名称“Ptime”未使用 tkinter 比例滚动条定义
- r - 使用 R 和 RCurl 连接到 SFTP 的问题
- r - 如何训练具有大量分类特征的模型 :: RStudio 崩溃
- javascript - 请求方法未显示在 this.props 中
- python - Pytest 在尝试运行测试时给我一个错误
- numpy - 将 numpy.datetime64 转换为纪元时间
- r - 在 r 中的数据表中找到前 1 个百分位数
- c++ - 检查数组中的所有对是否都可以被 k 整除
- html - 如何在componentDidMount(使用react.js)中将div滚动到底部?
- deep-linking - 如何将路由与 Branch.io 后备 utl 一起使用