我使用此命令获取拉取请求中已更改的所有文件的列表。
git diff --name-only HEAD master
示例输出:
my/repo/file1.java
my/repo/file3.java
my/repo/file5.java
我想将此输出转换为以下内容:
file:my/repo/file1.java||file:my/repo/file3.java||file:my/repo/file5.java
这样我就可以仅对 IntelliJ IDEA 中的这些文件运行代码分析。
到目前为止我尝试了什么?
git diff --name-only HEAD master | sed -e 's/^/file:/' | paste -s -d "||" -
这给了我以下输出:
file:my/repo/file1.java|file:my/repo/file3.java|file:my/repo/file5.java
注意单个 |
。
此外,请尽可能简化命令。
编辑:所有文件的名称中都不会有空格或换行符。
最佳答案
您也可以使用 awk
来完成
git diff --name-only HEAD master |
awk 'NR > 1 {printf("||")} {printf("file:%s",$0)} END{print ""}'
这个 awk 的作用是:
- 对于所有输入行但第一行,输出:
||
- 对于所有输入行,输出:
file:
+<input line content>
- 当没有更多的输入行可读时,输出一个换行字符
备注: END{print ""}
当你做 out=$(git .. | awk ...)
时是没有返回的
关于bash - 多行输出到带分隔符字符串的单行连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72668447/