Py学习  »  Git

在macos上使用sed替换git日志中的名称(对于gource)

Emile Claassens • 4 年前 • 442 次点击  

我正试着制作一个关于我们的软件开发项目的很好的视频使用 Gource a可以生成所有回购的组合git日志,其中: 第一 gource --output-custom-log ../logs/repo1.txt 然后 cat *.txt | sort -n > combined.txt 这将生成一个combined.txt文件,该文件是一个以管道分隔的文件,如下所示:

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客户机,因此id希望将他们的所有名称替换为一个版本我不介意每种情况设置多个sed。 所以找“约翰”,“约翰·多伊”和“多伊,约翰”替换为“约翰·多伊”应该在我的macbook上完成。

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

谁能帮我找到正确的正则表达式?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48465
 
442 次点击  
文章 [ 3 ]  |  最新文章 4 年前
abdan
Reply   •   1 楼
abdan    5 年前

尝试gnu sed:

sed -E "s/^(\w+\|)(john([\s_]doe)?|doe,\s*john)/\1John Doe/i" combined.txt

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

padawin
Reply   •   2 楼
padawin    5 年前

正如@wiktorstribizew所提到的,您可以:

sed -i -r "s/Doe, John|john_doe|John/user_john/g" combined.txt

有了它,你甚至可以:

sed -i -r -e "s/Doe, John|john_doe|John/user_john/g" -e "s/Wayne, Bruce|bruce_wayne|Bruce/user_bruce/g" combined.txt

并将更多替换项添加到 -e 选项:

   -e script, --expression=script
          add the script to the commands to be executed
Ed Morton
Reply   •   3 楼
Ed Morton    5 年前

一个regex几乎肯定是错误的方法,因为你会得到错误的匹配,除非你非常小心,这是低效的。

创建一个 aliases 包含输出中每个名称行的文件,后跟应映射到该文件的所有名称,然后可以执行此操作,以便在一次awk调用中清晰、简单、可靠、可移植且高效地更改它们:

$ 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 }

.

$ cat aliases
John Doe|John|john_doe|Doe, John
Susan Barker|Susie B|Barker, Susan

是的。

$ 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

.

$ 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