diff 仅显示已更改文件中的添加项

inf*_*ged 9 grep diff git

通常情况下diff,并git diff同时显示原始的和与修改后的行-+分别。有什么办法,我只能过滤才能看到修改后的行吗?这将立即将要读取的行数减少 2 倍。

我假设

git diff test.yml | grep '^+' | less -R
Run Code Online (Sandbox Code Playgroud)

git diff test.yml | egrep '^+' | less -R
Run Code Online (Sandbox Code Playgroud)

有相同的结果。即他们会在文件中显示任何新添加的内容。但是egrep向我展示了整个文件。为什么呢?

无论如何,使用上述方法,我失去了颜色。有什么办法可以保持颜色吗?

Mic*_*fin 9

您可以使用--word-diff+-行与使用红色/绿色文本突出显示的更改一起压缩,并停止一起使用 grep。

在此处输入图片说明

-U0如果您真的想进一步压缩它,您可以将其与删除差异周围的所有上下文结合起来。

在此处输入图片说明

这种方法比使用 grep 更好,因为您不会丢失输出,您可以判断何时添加或简单更改了一行,并且不会完全丢失删除,同时仍将输出压缩为易于阅读的内容。

关于 egrep 的问题的答案已经由 @Stephen Kitt在这里回答


Ste*_*itt 5

egrep使用扩展正则表达式,所以

\n
egrep '^+'\n
Run Code Online (Sandbox Code Playgroud)\n

匹配一个或多个行的开头(+这里是一个特殊字符),这是未定义的,可能会导致错误或各种行为,具体取决于实现egrep

\n

要匹配 \xe2\x80\x9c+\xe2\x80\x9d 字符,您需要对其进行转义:

\n
egrep '^\\+'\n
Run Code Online (Sandbox Code Playgroud)\n

要看到颜色,你需要强制git输出它们;默认情况下,它在管道时禁用它们:

\n
git diff --color\n
Run Code Online (Sandbox Code Playgroud)\n

要过滤此内容,您需要考虑用于颜色的转义码:

\n
git diff --color ... | egrep '^.[[[:digit:]]+m\\+' | less -R\n
Run Code Online (Sandbox Code Playgroud)\n