max*_*zig 28 command-line shell 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 是不够的,因为在这种情况下,行信息会丢失。
tob*_*ies 25
grep -Fxf file1 file2
Run Code Online (Sandbox Code Playgroud)
-F表示匹配纯字符串(不是正则表达式),-x表示仅整行匹配,-f表示从命名为参数的文件中获取“模式”(即行)
Mik*_*ray 24
即使您不想要差异,如何使用差异?尝试这个:
diff --unchanged-group-format='@@ %dn,%df
%<' --old-group-format='' --new-group-format='' \
--changed-group-format='' a.txt b.txt
Run Code Online (Sandbox Code Playgroud)
这是我从您的示例数据中得到的信息:
$ cat a.txt
Foo Bar
X
Hello
World
42
$ cat b.txt
Foo Baz
Hello
World
23
$ diff --unchanged-group-format='@@ %dn,%df
%<' --old-group-format='' --new-group-format='' \
--changed-group-format='' a.txt b.txt
@@ 2,3
Hello
World
Run Code Online (Sandbox Code Playgroud)
Oli*_*Oli 10
comm可以使用。man comm对于所有选项,但您希望使用它comm -12 ...来仅显示两个输入中都存在的行。
正如人们所指出的,您需要首先传递您的输入sort。
我认为没有一个命令可以执行您希望它执行的操作。不过,您可以尝试将diffwith的输出结合起来grep。如果您的文本文件不包含任何字符|, <, >,则以下内容会为您提供一些有用的输出:
$ diff --side-by-side a b | grep -n -v "[|<>]"
3:Hello Hello
4:World World
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43828 次 |
| 最近记录: |