我试图只获得父文件夹的位数差异。这是我的git-diff输出:
git diff --dirstat=files,0 HEAD^ HEAD | awk '{print $2}'
aws_app1_service/app/models/
aws_app1_service/app/views/
aws_app1_service/app/
aws_app2_service/config/
aws_app2_service/k8s_resources/
aws_app2_service/tests/steps/
aws_app2_service/tests/
aws_app3_service/
aws_app4_service/
在这之后,我想使用sed只过滤斜杠之前最左边的部分,然后进行排序|unique即最终输出应该是这样的:
aws_app1_service
aws_app2_service
aws_app3_service
aws_app4_service
有人能告诉我应该如何正确使用sed命令来获得所需的输出吗?提前感谢
隐藏在git help diff
:中间
有一个命令列出";最高水平的差异而不重复出现":
git diff-tree HEAD^ HEAD
git diff-tree --name-only HEAD^ HEAD
它比较了两个树("目录"的技术术语(,因此您可以将其用于repo中的任何目录:
git diff-tree HEAD^:aws_app1_service/app HEAD:aws_app1_service/app
# any pair of directories works :
git diff-tree HEAD:aws_app2_service/config HEAD:aws_app1_service/config
git diff-tree develop:aws_app2_service/config master:aws_app1_service/app/views
# etc ...
要完成您尝试的命令:
git diff --name-only HEAD^ HEAD | # list the name of *all* differing files
cut -d / -f 1 | # one of many ways to get 'the chunk until the first "/"'
sort -u # remove repetitions
一种方法可以是将awk的输出管道化,以像这样进行切割
git diff --dirstat=files,0 HEAD^ HEAD | awk '{print $2}' | cut -d "/" -f1
使用awk尝试此操作(不输入其他命令(:
git diff --dirstat=files,0 HEAD^ HEAD | awk '{split($2,a,"/"); print a[1]}'
我用"/"分隔符拆分数组"a"中的列2"$2",然后显示数组a[1]的第一个索引。
sed 's~/.*~~' | sort -u
将以第一个斜线开始的所有内容都替换为无
或
grep -o '^[^/]* | sort -u
只打印第一个斜线之前的所有内容
假设目录名中没有%
,您也可以使用以下简单的look-behind表达式:
git diff --dirstat=files,0 --format= HEAD^ HEAD | grep -Po '(?<=% )[^/]+' | sort -u