我想区分两组 mod_rewrite 规则。这组行大约有 90% 相同,但顺序如此不同以至于 diff 基本上说它们完全不同。
无论行号如何,如何查看两个文件之间哪些行真正不同?
Diff 是一个很好的工具来显示两个文件之间的变化。但是如何显示两个文本文件的相似性(同时忽略差异)?
即样本输入:
a:
Foo Bar
X
Hello
World
42
b:
Foo Baz
Hello
World
23
Run Code Online (Sandbox Code Playgroud)
伪输出(类似这样):
@@ 2,3
=Hello World
Run Code Online (Sandbox Code Playgroud)
仅对两个文件进行排序并使用 comm 是不够的,因为在这种情况下,行信息会丢失。
我试图了解两个文件上的 linux diff 命令,它们的行只是彼此的排列,但无法理解它生成的输出。考虑以下三个命令:
[myPrompt]$ cat file1
apples
oranges
[myPrompt]$ cat file2
oranges
apples
[myPrompt]$ diff file1 file2
1d0
< apples
2a2
> apples
Run Code Online (Sandbox Code Playgroud)
有人可以解释上述 diff.c 的神秘输出吗?
1d0和2a2意味着什么?我从这个答案中了解到:
“<”表示文件 2 中缺少该行,“>”表示文件 1 中缺少该行
但这并不能解释为什么输出中缺少橙子。
我试图diff在忽略某些子目录的同时比较两个目录树,但我无法让它工作。这是我的文件结构的样子:
temp/
|-- d1/
|-- f1.txt
|-- ignoreme/
|-- f2.txt
|-- d2/
|-- f1.txt
|-- ignoreme/
|-- f2.txt
Run Code Online (Sandbox Code Playgroud)
我试图让它忽略d1/ignoreme和下的任何内容d2/ignoreme,但它不会这样做。
diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/ d1 d2
Files d1/ignoreme/f2.txt and d2/ignoreme/f2.txt differ
Run Code Online (Sandbox Code Playgroud)
我也试过
diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* d1 d2
Run Code Online (Sandbox Code Playgroud)
和
diff -qr --exclude=/home/ubuntu/temp/d1/ignoreme/* --exclude=/home/ubuntu/temp/d2/ignoreme/* d1 d2
Run Code Online (Sandbox Code Playgroud)
但我总是得到相同的结果。我如何让这个工作?
我想使用 cli 工具进行文件比较,并且在输出行之前需要行号,这有助于我可以跳转到行差异,因为我使用的工具可以了解跳转的位置,如果行是这样开始的 :line-number: regular line contents
所以我尝试了diff,阅读文档似乎是可能的:
-D, --ifdef=NAME output merged file with `#ifdef NAME' diffs
--GTYPE-group-format=GFMT format GTYPE input groups with GFMT
--line-format=LFMT format all input lines with LFMT
--LTYPE-line-format=LFMT format LTYPE input lines with LFMT
These format options provide fine-grained control over the output
of diff, generalizing -D/--ifdef.
LTYPE is `old', `new', or `unchanged'. GTYPE is LTYPE or `changed'.
GFMT (only) may contain:
%< lines from FILE1
%> lines from FILE2
%= lines common to …Run Code Online (Sandbox Code Playgroud) 我在我的终端上运行了以下代码。
LC_ALL=C && grep -F -f genename2.txt hg38.hgnc.bed > hg38.hgnc.goi.bed
Run Code Online (Sandbox Code Playgroud)
这并没有给我两个文件之间的公共行。我在那里缺少什么?
diffOpenBSD 上的实现有一个非标准-d选项,其中包含以下文档:
-d非常努力地产生尽可能小的差异。在处理具有许多更改的大文件时,这可能会消耗大量处理能力和内存。
GNUdiff实现具有与较短文档相同的选项
-d,--minimal努力找到较小的一组更改
我不时使用此选项只是为了查看它是否生成与diff没有该选项的同一命令不同的任何形状或形式的输出,但我从未见过任何区别(没有双关语意)。
有人可以提供或指出一个示例,其中此选项实际上会从相同的命令中产生不同的结果-d吗?或者,如果有人可以解释此选项启动所需的情况。我也不确定“最小”是指“更少的输出线”还是“更少的大块头”。
一个没有受过教育的猜测是它与非常大的大块头有关。
我已经阅读了 diff 和 patch,但我不知道如何应用我需要的东西。我想它很简单,所以为了显示我的问题,请使用这两个文件:
一个.xml
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#AAAAAA</color>
<color name="not_in_b_too">#AAAAAA</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
xml文件
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
我想要一个输出,看起来像这样(顺序无关紧要):
<resources>
<color name="same_in_b">#AAABBB</color>
<color name="not_in_b">#AAAAAA</color>
<color name="in_b_but_different_val">#BBBBBB</color>
<color name="not_in_b_too">#AAAAAA</color>
<color name="not_in_a">#AAAAAA</color>
</resources>
Run Code Online (Sandbox Code Playgroud)
合并应包含符合此简单规则的所有行:
我想在 bash 脚本中应用这个任务,所以如果另一个程序更适合,它不一定需要完成差异和补丁
你有三个文件夹:
你如何比较旧与当前和副本是不同的(或全新的)中的文件当前以区别?
我四处搜索,这似乎是一件很容易解决的事情,但我无法在我的特定示例中使用它。大多数消息来源建议使用rsync,所以我最终使用了以下命令:
rsync -ac --compare-dest=../old/ new/ difference/
Run Code Online (Sandbox Code Playgroud)
然而,这样做是将所有文件从new复制到difference,即使是那些与old相同的文件。
如果它有帮助(也许命令没问题,而故障出在其他地方),我就是这样测试的:
过去几天我一直在寻找解决方案,我真的很感激一些帮助。它不一定必须使用 rsync,但如果可能的话,我想知道我做错了什么。
我php5-fpm使用安装包apt;然后我对 PHP 配置文件进行了一些更改。
现在我会得到原始文件版本(安装的包的版本)和当前版本(由我修改)之间的差异。怎么做?