标签: diff

比较文件并判断它们的相似程度

有没有办法比较两个文件并给出它们相似性的某种数字指示?

例如,如果我有两个仅相差一个字符的文件(例如,删除或更改了一个字符),则程序应该说“文件 X 相差 1 个字符”。

或者,如果两行不同,请说“文件 X 相差两行”。

最好的输出类似于“文件 X 与文件 Y 的相似度为 95%”

diff

4
推荐指数
1
解决办法
1312
查看次数

启发式地找出一组文件的不同之处

我有大量由重复运行测试套件产生的输出文件,我想大致了解它们有多大不同。理想情况下,它们应该完全相同(表示完全可重复的测试)或几乎相同(例如,如果存在时间戳)。所以我正在寻找一个像这样的脚本:

show-greatest-diff /path/to/files/*.out
Run Code Online (Sandbox Code Playgroud)

因此,如果存在 100 个 *.out 文件,脚本应该将diff它们全部相互对立,并可能产生其中任何对不同的最大行数/字符数(并可能识别最不同的对),或者只是打印diff输出对差异最大或产生一些其他启发式有用的输出。

由于文件数量众多,此处建议的解决方案不适合我的用例。

shell ubuntu diff

4
推荐指数
1
解决办法
93
查看次数

Unix 命令行中的破折号“-”是什么意思?

鉴于此差异命令:

./a.out < 1.in | 差异 - 1.out

-diff这个词后面是什么意思?
谢谢您的帮助!

diff

4
推荐指数
1
解决办法
3004
查看次数

通过 BASH 数组来区分文件内容

我有两个bash数组,说:

arr1=( 1 2 3 )
arr2=( 1 2 A )
Run Code Online (Sandbox Code Playgroud)

我想使用diff. 我如何传递数组,就好像它们是文件的内容一样?

我尝试了一些变体,但都失败了:

diff -y <$( echo ${arr1[@]} | tr ' ' '\n' ) <$( echo ${arr2[@]} | tr ' ' '\n' )
diff -y <${arr1[@]} <${arr2[@]}
diff -y $(<${arr2[@]}) $(<${arr1[@]})
diff -y  <<<"$( echo ${arr1[@]} | tr ' ' '\n' )" \
         <<<"$( echo ${arr2[@]} | tr ' ' '\n' )"
Run Code Online (Sandbox Code Playgroud)

所需的输出将是预期的diff -y,如果我将数组存储到文件 a 和 b 中,我会得到:

diff a b
 1        1 …
Run Code Online (Sandbox Code Playgroud)

bash diff io-redirection array

4
推荐指数
1
解决办法
450
查看次数

如何通过管道将 find 的输出作为 diff 的输入?

这是一个关于 bash 的基本问题,但我找不到解决方案。

我有许多具有相同名称文件的子目录,我想比较所有这些文件的身份。

我可以返回此文件的列表

find . -name "protein.mol2"
Run Code Online (Sandbox Code Playgroud)

我知道该文件可以用作查询 diff

diff -q --from-file dir1/file dir2/file dir3/file; echo $?
Run Code Online (Sandbox Code Playgroud)

如何将findto的输出通过管道传输diff

shell bash diff

4
推荐指数
1
解决办法
4342
查看次数

使用 Diff 排除引号符号 - "

一个不正常的。简而言之,我有两个源文件夹。我想比较两者都有不同的代码集。但有一个符号会显示我想忽略的多个差异。

它位于单引号和双引号之间 ' - "

IE

$BlankValue="TEST";
$BLANKValue='TEST';
Run Code Online (Sandbox Code Playgroud)

无论如何,我是否可以使用 Diff 来忽略上述内容。

我将 Diff 与 Sed 一起使用,但是在执行表达式时我被卡住了。无法在单引号内使用双引号。我该如何解决这个问题。

diff

4
推荐指数
1
解决办法
1698
查看次数

区分两个变量的优雅方式?

我有 $a 和 $b。我想跑diff那些。

我想出的最好的是:

diff <(cat <<<"$a") <(cat <<<"$b")
Run Code Online (Sandbox Code Playgroud)

但我觉得我缺少一个聪明的 Bash 语法来做到这一点(如“你为什么不只使用 foo?”)。

bash diff io-redirection here-string

4
推荐指数
1
解决办法
1万
查看次数

如何查看同一程序不同版本的手册页之间的差异?

每当我升级我的一个 Linux 机器时(即安装我最喜欢的发行版的下一个版本),升级相应的配置文件总是非常耗时,因为在许多情况下,我不只是更改发行版的默认配置文件来反映我的情况,但我非常仔细地制作了自己的配置文件。

到现在为止,在升级时,在这些情况下,我要么完全从头开始阅读相应的手册页并从头开始制作新的配置文件(这很干净,但需要付出很多努力),或者我比较了(想想差异)旧的和新发行版的默认配置文件,当我看到可能很重要的差异时,我已将其“移植”(合并)到我自己的配置文件中(由于多种原因,我对这种方法不满意,其中之一是维护者可以忽略一个新的配置指令,在我的情况下忽略它可能是危险的;但如果我赶时间,它并不总是可以避免的)。

我一直问自己其他人是如何解决这个问题的。一种想法是将旧版本软件的手册页与新版本的手册页进行比较,从而立即看到配置指令或方法的所有差异。

所以问题是:有人知道手册页的特定差异查看器,特别是文本控制台(主要场景是通过 SSH 工作而不使用 X)吗?

请注意,我知道有很多不同的查看器(我已经阅读了数十篇关于此主题的文章和问答)。我的问题特别是关于手册页的差异查看器,它提供了一些安慰(例如,你告诉它旧手册页的基本目录,然后只需要说“show diff sshd_config”等)。

我也知道我最终可以读取相应上游的更改日志,但是我看到许多您不能依赖它的情况(即那里没有提到所有更改),它更不方便,并且一些发行版很严重修补上游,所以我会说这不是一个真正的选择。将旧版本的源代码与新版本的源代码进行比较,只是为了找出新的配置选项似乎太过分了,而且对于 Apache、Sendmail 等来说,这可能是不可能的。相比之下,比较手册页似乎是合理的(如果可能的话)。

有任何想法吗?

man diff

4
推荐指数
1
解决办法
466
查看次数

使用 git diff 仅显示没有语法的更改行

我有一个文本文件中的用户名列表。我更新这个文件并提交它。我正在寻找一种方法来获取自上次提交以来的更改列表。

我根本不需要任何差异格式,我只想获得自上次提交以来每行一个用户名的输出(因为它们被添加到每个提交中)。

我找不到从输出中删除所有 git diff 语法的设置,因此它纯粹是仅添加的新行列表。

例子

原始文件:

user1
user2
user3
Run Code Online (Sandbox Code Playgroud)

然后我添加

user4
user5
Run Code Online (Sandbox Code Playgroud)

然后提交。

我希望能够进行 git diff 并仅查看:

user4
user5
Run Code Online (Sandbox Code Playgroud)

diff git text-processing

4
推荐指数
1
解决办法
8932
查看次数

使用 diff 比较两个命令的输出

如何使用diff比较两个命令的输出?

我知道如何使用它来比较文件的内容filename1与命令的输出cmd2

cmd | diff filename -
Run Code Online (Sandbox Code Playgroud)

我该如何做到这一点,以便我可以有另一个命令,例如cmd1代替filename

我使用的是 dash,它不支持进程替换。

diff dash stdout

4
推荐指数
1
解决办法
1570
查看次数

标签 统计

diff ×10

bash ×3

io-redirection ×2

shell ×2

array ×1

dash ×1

git ×1

here-string ×1

man ×1

stdout ×1

text-processing ×1

ubuntu ×1