Diff:你如何只比较每行的前 n 个字符?

The*_*Bat 4 linux bash diff command-line

我有两个从解码的二进制数据生成的日志文件。解码器略有不同,我试图隔离输出中的差异。为此,我比较了两个日志文件,除了每行的时间戳不同之外,它运行得很好。由于某些原因,时间戳的差异不相关,所以我希望 diff 忽略它们。

因为日志文件遵循特定的格式,所以我可以简单地从每行中排除最后约 40 个字符以忽略时间戳。前任:

A线:

[T9] | ENTRY NAME                       varA             = 0000012B  varB             = 00000000 | 000015.508.107.113s | file.cpp              :738
Run Code Online (Sandbox Code Playgroud)

B线:

[T9] | ENTRY NAME                       varA             = 0000012B  varB             = 00000000 | 000015.508.107.163s | file.cpp              :738
Run Code Online (Sandbox Code Playgroud)

在我的情况下,这些行应该被视为相同。

如何告诉 diff 只包含每行的前 n 个字符,或排除每行的最后 m 个字符?

cho*_*oba 7

在 bash 中,您可以使用进程替换。

要删除最后 40 个字符,您可以使用

diff <(sed 's/.\{40\}$//' file1) \
     <(sed 's/.\{40\}$//' file2)
Run Code Online (Sandbox Code Playgroud)

要选择前 40 个字符,您可以使用

cut -c1-40 file
Run Code Online (Sandbox Code Playgroud)

  • 我将这两个部分结合起来执行以下操作:`diff &lt;(cut -c -97 fileA.txt) &lt;(cut -c -97 fileB.txt) &gt; log.patch` (2认同)

归档时间:

查看次数:

2864 次

最近记录:

4 年 前