java - 使用 shell 脚本比较两个 java 属性文件

标签 java unix shell

<分区>

如何使用 shell 脚本比较两个不同文件夹中的两个属性文件 输入可以是两个文件夹的路径吗?

两个文件夹中都有多个文件,每个文件都需要检查

最佳答案

您可能需要多解释一下您的要求。然而,您很可能可以使用 diff 命令做您想做的事(在 sort 和/或 grep 的帮助下)。

假设您有两个文件:a.properties 和 b.properties

如果你只是想知道文件是否有任何不同,你可以使用

diff a.properties b.properties

如果它们相同或差异列表,您将不会得到任何输出。

如果您想在更语义化的层面上进行比较,即两组属性是否相同,那么您需要做更多的工作。这些文件在文本上可能有所不同,但对于使用它们的 Java 程序来说意义相同。例如,属性可以以不同的顺序出现。可以有空行、其他空格和注释。

如果是这样的话,你会在乎评论是否相同吗?它们不会影响程序的运行,但它们具有一定的意义(对那些阅读文件的人来说是有值(value)的)。如果您不在乎,请将它们剥离。

您可能不关心空行,因为它们没有任何意义。

您还需要处理以下情况:

a.properties:
    prop = value
b.properties:
    prop=value

同样,文本不同(注意等号周围的空格)但在 Java 中具有相同的含义。

从简单开始,我们假设属性以相同的顺序出现。

忽略空行:

diff -B a.properties b.properties

处理随机空白(例如等号周围)

diff -w a.properties b.properties

结合所有这些:

diff -w -B a.properties b.properties

删除注释:

grep -v '^#.*$' a.properties > a.tmp
grep -v '^#.*$' b.properties > b.tmp
diff -w -B a.tmp b.tmp
rm a.tmp b.tmp

允许属性以不同的顺序排列,去掉注释:

grep -v '^#.*$' a.properties | sort > a.tmp
grep -v '^#.*$' b.properties | sort > b.tmp
diff -w -B a.tmp b.tmp
rm a.tmp b.tmp

关于java - 使用 shell 脚本比较两个 java 属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1636453/

相关文章:

java - Java 中的 Get 和 Set 方法。它们是如何工作的?

java - 在获取当前纬度和经度时获取空对象引用

c++ - 未实现 : unexpected ast of kind ltgt_expr in C++

c - 在unix中执行wc命令的程序。字数错误

linux - 在 Unix 中,我如何计算不以空格开头的代码行数?

shell - MinGW/MSYS shell 颜色

java - Java 中的 ByteBuffer 到 String

java - 当您有一堆极其相似且无法共享接口(interface)的类时,应该使用什么正确的设计模式?

c - 编写我自己的查找程序时出现段错误

shell - 伯恩 shell : send arguments $2 to $N to variadic function?