首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MacOs上使用sed替换git日志中的名称(适用于Gource)

在MacOs上使用sed替换git日志中的名称(适用于Gource)
EN

Stack Overflow用户
提问于 2019-04-16 04:13:29
回答 2查看 81关注 0票数 1

我正在试着在我们的软件开发项目上制作一个很好的Gource视频。使用Gource a可以生成所有repos的组合git日志:首先是gource --output-custom-log ../logs/repo1.txt,然后是cat *.txt | sort -n > combined.txt。这将生成一个combined.txt文件,它是一个以竖线分隔的文件,如下所示:

代码语言:javascript
复制
1551272464|John|A|repo1/file1.txt
1551272464|john_doe|A|repo1/folder/file9.py
1551272464|Doe, John|A|repo2/filex.py

因此它的:EPOCH|委员会名称|A或D或C|已提交的文件

我想要解决的实际问题是,我的开发人员使用了具有不同提交者名称的不同git客户端,所以我希望将它们的所有名称都替换为一个版本。我不介意在每种情况下设置多个sed。所以找到" John“,"john_doe”和"Doe,John“,并用"John Doe”代替它。它应该在我的MacBook上完成。

所以我尝试了sed -i -r "s/John/user_john/g" combined.txt,但这里的问题是,它找到了"John“和"Doe,John”,并且只替换了"John“部分,所以我需要做一个模糊搜索,并替换整个列。

谁能帮助我获得正确的正则表达式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-16 05:17:22

正则表达式几乎肯定是错误的方法,因为除非您非常小心,否则会得到错误的匹配,而且效率很低。

只需创建一个aliases文件,其中包含您想要在输出中使用的每个名称的一行,后跟应该映射到它的所有名称,然后您可以这样做,以便在一次对awk的调用中清楚、简单、健壮、可移植和高效地更改所有这些名称:

代码语言:javascript
复制
$ cat tst.awk
BEGIN { FS="[|]" ; OFS="|" }
NR==FNR {
    for (i=2; i<=NF; i++) {
        alias[$i] = $1
    }
    next
}
$2 in alias { $2 = alias[$2] }
{ print }

代码语言:javascript
复制
$ cat aliases
John Doe|John|john_doe|Doe, John
Susan Barker|Susie B|Barker, Susan

代码语言:javascript
复制
$ cat file
1551272464|John|A|repo1/file1.txt
1551272464|Susie B|A|repo2/filex.py
1551272464|john_doe|A|repo1/folder/file9.py
1551272464|Doe, John|A|repo2/filex.py
1551272464|Barker, Susan|A|repo2/filex.py

代码语言:javascript
复制
$ awk -f tst.awk aliases file
1551272464|John Doe|A|repo1/file1.txt
1551272464|Susan Barker|A|repo2/filex.py
1551272464|John Doe|A|repo1/folder/file9.py
1551272464|John Doe|A|repo2/filex.py
1551272464|Susan Barker|A|repo2/filex.py
票数 0
EN

Stack Overflow用户

发布于 2019-04-16 08:42:34

尝试gnu sed:

代码语言:javascript
复制
sed -E "s/^(\w+\|)(john([\s_]doe)?|doe,\s*john)/\1John Doe/i" combined.txt

检查编辑后添加-i选项;sed -Ei...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55696604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档