考虑到任何颜色或文本格式的输出,如何使用awk仅显示+和-行,git diff可能会输出:
这里的其他答案(包括我的其他答案)中没有一个可以完全正确地完成您想要的100%的操作。但是,此答案将会。这是一个1-liner,您可以复制并粘贴到终端中。我已将其设置为多行以提高可读性-您可以使用相同的方式将其复制粘贴,这样我也可以使其可读!它依赖于awk编程语言:
git diff --color=always "$@" | awk '
# 1. Match and then skip "--- a/" and "+++ b/" lines
/^(\033\[(([0-9]{1,2};?){1,10})m)?(--- a\/|\+\+\+ b\/)/ {
next
}
# 2. Now print the remaining "+" and "-" lines ONLY! Note: doing step 1 above first was required or
# else those lines would have been matched by this matcher below too since they also begin with
# the "+" and "-" symbols.
/^(\033\[(([0-9]{1,2};?){1,10})m)?[-+]/ {
print $0
}
' | less -RFX
这是它的功能。所有这些功能结合在一起,可以解决这里所有其他答案的缺点:
- 它处理彩色和无彩色输出。这就是正则表达式的作用:
^(\033\[(([0-9]{1,2};?){1,10})m)?
- 它处理所有颜色和所有文本格式选项,包括粗体,斜体,删除线等,您可以在
git config设置中进行设置。这就是为什么上述正则表达式具有;?和{1,10}它:如果它检测到的颜色或文本格式代码的开始,它将匹配到这些组合ANSI编码的10个序列。
它也不包括以@@和开头的行diff,就像公认的答案一样。如果您确实想要这些行(坦率地说,我认为这是有用的:)),请执行以下操作:
git diff --unified=0
要么
git diff -U0
它以与以下方式完全相同的方式显示输出git diff:在less具有可选颜色输出(-R)的寻呼机中,并且仅当文本> 1页(-F)时,并且当您使用q(-X)时将当前文本页面保留在屏幕上。
由于它使用awk编程语言,因此它还具有功能强大且易于配置的优点。
如果您有兴趣学习awk,那么这里有一些资源:
gawk(GNU awk)手册:https : //www.gnu.org/software/gawk/manual/html_node/index.html#SEC_Contents
- 研究
git diffn及其中的评论:https : //github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/blob/master/useful_scripts/git-diffn.sh
- 如果你想
git diffn太多,这是git diff行号,在这里看到:行号git的差异(行号的Git日志)
- 一些awk“ hello world”和语法测试示例:https : //github.com/ElectricRCAircraftGuy/eRCaGuy_hello_world/tree/master/awk
另外,我还包装了以上内容以用作git diffc,表示“ git diff仅显示'c'hanges”。用法等同于git diff; 只是使用git diffc而不是!它支持所有选项。默认情况下,颜色为开。要关闭它,只需使用git diffc --no-color或git diffc --color=never。有关man git diff详细信息,请参见。
自从我昨晚刚完成git diffn(git diff用“ n'umbers” 显示的工具)以来,写作git diffc是微不足道的。我以为我现在最好在知识不新鲜的情况下这样做。
安装git diffc:
请按照此处答案末尾的说明进行操作,但git-diffn在说明中无处不在,请git-diffc改用。这也包括在wget命令中。下载和安装git diffc很容易:仅需几个命令。