'diff' 中的这些代码是什么意思以及如何摆脱它们?

suh*_*oor 6 diff text-processing file-comparison

我正在使用diff查找从当前文件到目标的差异。

我的命令是 diff -w --from-file /tmp/new_list.txt /tmp/protected_client.txt

输出是

8c8,9
> VM-E
Run Code Online (Sandbox Code Playgroud)

我使用以下方法过滤了它: diff -w --from-file /tmp/new_list.txt /tmp/protected_client.txt | tail -n +2 | sed 's/> //g'

伟大的。现在,如果我有多个差异,我会看到:

2d1
< esxi02
3a3
> psc-dr
Run Code Online (Sandbox Code Playgroud)

两个问题。这些值是什么。我知道<的手段价值是存在的from-file,但不是在to-file>是相反的,

第二个问题:我该如何摆脱这些代码2d13a3或任何出现。

jim*_*mij 11

这些代码为您提供了一个行号和一种已发现的差异类型:

  • a 代表添加
  • c 改变了
  • d 已删除

例如:8c8,9装置,其在所述第一文件中的行号8( --from-file)变化为东西和这个东西被存储在线8-9在第二个文件。同样2d1意味着第一个文件的第 2 行已被删除,预计在第二个文件的第 1 行之后,依此类推。

我不认为您真的想摆脱这些代码,它们非常有用,但是如果您坚持删除它们(或更改为其他东西),那么只需使用以下六种输出格式(在这里我假设您是使用 GNU 差异):

  • --old-line-format
  • --new-line-format
  • --old-group-format
  • --new-group-format
  • --changed-group-format
  • --unchanged-group-format

我不会在这里介绍(相当复杂的)语法的所有细节,您可以info diffIf-then-else章节下找到它们的描述。波纹管会给你你想要的,即根本没有代码,只是纯粹的<>

diff --old-line-format=$'< %l\n' --new-line-format=$'> %l\n' \
     --old-group-format=$'%<' --new-group-format=$'%>' \
     --changed-group-format=$'%>' --unchanged-group-format='' file1 file2
Run Code Online (Sandbox Code Playgroud)

如果你愿意,你可以为它做别名。