Art*_*tem 20 git diff git-diff
我试图只获得已更改的新版本的行,而不是git diff显示的所有其他信息.
对于:
git diff HEAD --no-ext-diff --unified=0 --exit-code -a --no-prefix
Run Code Online (Sandbox Code Playgroud)
表明:
diff --git file1 file2
index d9db605..a884b50 100644
--- file1
+++ file2
@@ -16 +16 @@ bla bla bla
-old text
+new text
Run Code Online (Sandbox Code Playgroud)
我想看的只是:
new text
Run Code Online (Sandbox Code Playgroud)
可能吗?
mic*_*has 14
只有添加的行在所有情况下都没有意义.如果你替换了一些文本块并且你发生了包含之前存在的单行,那么git必须匹配并猜测.- 通常输出git diff可以用作patch之后的输入,因此是有意义的.只有添加的行没有精确定义,因为在某些情况下git必须猜测.
如果你仍然想要它,你就不能+单独相信一个领先的标志.也许过滤所有绿线更好:
git diff --color=always|perl -wlne 'print $1 if /^\e\[32m\+\e\[m\e\[32m(.*)\e\[m$/'
Run Code Online (Sandbox Code Playgroud)
仅对于所有红线的已删除行过滤:
git diff --color=always|perl -wlne 'print $1 if /^\e\[31m-(.*)\e\[m$/'
Run Code Online (Sandbox Code Playgroud)
检查您可以使用的输出中的颜色代码:
git diff --color=always|ruby -wne 'p $_'
Run Code Online (Sandbox Code Playgroud)
如果您只想要该new text部件,请使用以下内容:
git diff HEAD --no-ext-diff --unified=0 --exit-code -a --no-prefix | egrep "^\+"
Run Code Online (Sandbox Code Playgroud)
这基本上就是你的代码,egrep用正则表达式传递给命令.正则表达式将仅过滤以加号开头的行.
这是一个使用的答案grep。它保留了原始的红/绿颜色以提高可读性。我提供了一些语法变化:
git diff --color | grep --color=never $'^\e\[3[12]m'
git diff --color | grep --color=never $'^\033\[3[12]m'
git diff --color | grep --color=never -P '^\e\[3[12]m'
git diff --color | grep --color=never -P '^\033\[3[12]m'
Run Code Online (Sandbox Code Playgroud)
解释:
git diff --color需要防止 git 在管道传输时禁用颜色。grep --color=never防止 grep 突出显示匹配的字符串(这会从原始命令中删除原始颜色)\e[31m) 或绿色 ( \e[32m) 转义码开头的行。$'...'(ANSI-C 引用语法)或(-Pperl 语法)是让将orgrep解释为字符。\e\033ESC