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

vet*_*i02 6 java unix shell

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

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

dav*_*ave 17

您可能需要更多地解释您的要求.但是,您最有可能使用diff命令执行所需操作(在sort和/或grep的帮助下).

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

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

diff a.properties b.properties
Run Code Online (Sandbox Code Playgroud)

如果它们相同或存在差异列表,您将无法获得输出.

如果你想在更语义的层面上进行比较,也就是说,两组属性是相同的,那么你需要做更多的事情.文件可能在文本上有所不同,但对使用它们的Java程序来说意味着相同的事情.例如,属性可以以不同的顺序发生.可以有空行,其他空格和注释.

如果是这种情况,您是否关心评论是否相同?它们不会影响程序的运行,但它们具有意义(对于读取文件的人有意义).如果您不在乎,请将它们剥离.

你可能不关心空行,因为它们没有意义.

您还需要处理以下情况:

a.properties:
    prop = value
b.properties:
    prop=value
Run Code Online (Sandbox Code Playgroud)

同样,文本上不同(注意等于的空格)但在Java中具有相同的含义.

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

忽略空行:

diff -B a.properties b.properties
Run Code Online (Sandbox Code Playgroud)

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

diff -w a.properties b.properties
Run Code Online (Sandbox Code Playgroud)

结合所有这些:

diff -w -B a.properties b.properties
Run Code Online (Sandbox Code Playgroud)

删除评论:

grep -v '^#.*$' a.properties > a.tmp
grep -v '^#.*$' b.properties > b.tmp
diff -w -B a.tmp b.tmp
rm a.tmp b.tmp
Run Code Online (Sandbox Code Playgroud)

允许以不同顺序的属性,剥离注释:

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
Run Code Online (Sandbox Code Playgroud)