我想有条件地格式化 Unix 文件,我目前正在处理diff命令,想知道是否可以格式化diff命令输出的文本。
例子:
匹配的值应显示为绿色。
不匹配的值应显示为红色。
假设我有两个文件file1和file2我的命令diff file1 file2。
现在我希望假设输出包含 5 个不匹配,那么这些不匹配应该以红色显示。如何使用unix实现这一目标?
简而言之,“对于不匹配的值,将 diff 命令的输出颜色更改为红色”
大多数应用程序很聪明地使用它们可用的终端的整个宽度。我的 shell 可以,screen、vim 等。但是,diff在并排模式 ( -y) 中不可以。这让我很生气。它使用 126 个字符的宽度,这甚至不是我的 270 块宽度终端的一半。
查看手册页并没有发现任何关于自动调整宽度的特别之处,只是通过手动指定它-W。
是否有“隐藏功能”diff允许它自动扩展到终端的整个宽度?或者; -W <terminalsize>每当我运行它时自动插入到我的 diff 命令中的最简单路径是什么?
我假设自动将 -W 附加到所有内容不会伤害任何东西,因为它只会意味着“使用 $x 列”,这始终是我想要的,无论我是否处于并排模式,否则。
我有两个看起来与我相同的文件(包括尾随空格和换行符),但 diff 仍然表示它们不同。即使我进行diff -y并排比较,线条看起来也完全相同。diff 的输出是整个 2 个文件。
知道是什么原因造成的吗?
我一直在使用 git diff,它会产生彩色输出。但是,我现在发现我需要对某些东西使用普通的差异,并且由于缺少颜色,它产生了大量难以阅读的输出。如何让 diff 产生可读的彩色输出?理想情况下,同时将其管道化,以便轻松查看大文件。
我有两个大文件(每个 6GB)。它们是未排序的,以换行符 ( \n) 作为分隔符。我该如何区分它们?应该不到 24 小时。
和
diff -r
Run Code Online (Sandbox Code Playgroud)
我可以做这个任务,但是它需要很长时间,因为diff检查文件的内容。
我想要一些东西来确定两个文件在大小、上次修改等方面是相同的。但是没有一点一点地检查文件(例如一个视频需要很长时间)。
有没有其他办法?
我正在尝试使用命令创建补丁
git diff sourcefile >/var/lib/laymab/overlay/category/ebuild/files/thepatch.patch
Run Code Online (Sandbox Code Playgroud)
当我应用补丁时,它给了我
$ patch -v
GNU patch 2.7.5
$ /usr/bin/patch -p1 </var/lib/laymab/overlay/category/ebuild/files/thepatch.patch
patching file sourcefile
Hunk #1 FAILED at 1 (different line endings).
Hunk #2 FAILED at 23 (different line endings).
Hunk #3 FAILED at 47 (different line endings).
Hunk #4 FAILED at 65 (different line endings).
Hunk #5 FAILED at 361 (different line endings).
5 out of 5 hunks FAILED -- saving rejects to file sourcefile.rej
Run Code Online (Sandbox Code Playgroud)
我试图将 dos2unix 应用于 src 文件和补丁文件,但消息没有消失......
UPD:--ignore-whitespace 也无济于事
PATCH COMMAND: …Run Code Online (Sandbox Code Playgroud) 我有文件a,b并且我想输出b更改后的行,因为它是从a. 只是修改后的行,没有周围的上下文,没有差异偏移标记。
我如何使用 shell 脚本来做到这一点?(没有 Python/Perl/PHP/...)
sed 和 awk 是可接受的解决方案。
现在,我正在做的是 diff -y 与 --suppress-common-lines 和 sed 使用正则表达式反向引用来获取空格后的正确部分。一定会有更好的办法?
使用 perl(这是被禁止的),我会做这样的事情:
diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
Run Code Online (Sandbox Code Playgroud) 如何使用该diff命令来比较 2 个命令的输出?
这样的东西存在吗?
diff ($cat /etc/passwd) ($cut -f2/etc/passwd)
Run Code Online (Sandbox Code Playgroud) 除了Meld之外,我几乎没有使用过任何东西。你能推荐其他东西吗?
如果您给出推荐理由(作为评论),那就更好了。
[注意] 我想要一个替代方案,因为 Meld 最近失去了将整个内容从一个文件复制到另一个文件的功能。我指的是通过Copy To Left/Right右键单击菜单项提供的功能。
[更新] 刚查了一下,问题是1.3.2引入的。1.3.1运行良好,我检查过的最新版本是1.4.0,它不起作用。
diff ×10
bash ×2
colors ×2
awk ×1
git ×1
gui ×1
ksh ×1
large-files ×1
less ×1
newlines ×1
patch ×1
performance ×1
sed ×1
shell ×1
shell-script ×1
software-rec ×1
terminal ×1