我想知道是否有人可以告诉我,如果在unix中有可用的函数,bash会比较文件的所有行。如果它们不同,它应该输出true/false,或-1,0,1。我知道这些cmp函数以其他语言存在。我一直在看附近的手册页,但没有成功。如果它不可用,有人能帮我想出一个替代解决方案吗?比较Unix中两个文本文件的比较函数
感谢
我想知道是否有人可以告诉我,如果在unix中有可用的函数,bash会比较文件的所有行。如果它们不同,它应该输出true/false,或-1,0,1。我知道这些cmp函数以其他语言存在。我一直在看附近的手册页,但没有成功。如果它不可用,有人能帮我想出一个替代解决方案吗?比较Unix中两个文本文件的比较函数
感谢
您可以使用diff,它输出两个文件之间的差异,返回1,如果它们是不同的,0,如果它们是相同的。
$> echo toto > file1; echo tota file2; diff file1 file2
1c1
< toto
---
> tota
你能解释一下这个好一点吗? toto和tota是...? – Masterminder
我输出到文件中的字符串。然后我比较每个文件,包含toto的file1,包含tota的file2。 – tomahh
然后< toto --- > tota? thx btw – Masterminder
你可以做两个文件的md5,然后在bash
比较结果。
这里没有Unix盒子来测试,但是这应该是正确的。
#!/bin/bash
md1=$(md5 file1);
md2=$(md5 file2);
if [ $md1 -eq $ $md2 ]; then
echo The same
else
echo Different
fi
有一个简单的cmp file file
命令可以做到这一点。它返回0,如果他们是平等的,1,如果它们是不同的,所以它的琐碎if
s到使用:
if cmp file1 file1; then
...
fi
希望这有助于=)
只是打败了我。 :-)添加一个'-s'选项将确保它对不同的文件保持沉默,并且只提供返回代码,所以你不会获得额外的输出 – TaninDirect
有几种方法可以做到这一点:
cmp -s $file1 $file2
:看看$?
的值。如果两个文件匹配,则为零,否则为非零。diff $file1 $file2 > /dev/null
:diff
命令的某些形式可以带一个参数,告诉它不输出任何内容。但是,大多数不会。毕竟,您使用diff
来查看两个文件之间的差异。再次,退出代码(可以查询$?
值将为0,如果文件匹配和非零否则您可以在shell中使用这些命令if语句:
if cmp -s "$file1" "$file2"
then
echo "The files match"
else
echo "The files are different"
fi
该diff
命令对文本文件明确提出,将cmp
命令应与所有二进制文件工作过。
#!/bin/bash
file1=old.txt
file2=new.txt
echo " TEST 1 : "
echo
if [ $(cmp -s ${file1} ${file2}) ]
then
echo "The files match"
else
echo "The files are different"
fi
echo
echo " TEST 2 : "
echo
bool=$(cmp -s "$file1" "$file2")
if cmp -s "$file1" "$file2"
then
echo "The files match"
else
echo "The files are different"
fi
echo
echo " TEST 3 : "
echo
md1=$(md5 ${file1});
md2=$(md5 ${file2});
mdd1=$(echo $md1 | awk '{print $4}')
mdd2=$(echo $md2 | awk '{print $4}')
echo $md1
echo $mdd1
echo $md2
echo $mdd2
echo
if [ $mdd1 = $mdd2 ];
then
echo "The files match"
else
echo "The files are different"
fi
回声“读一号文件” 读F1 回声 “读取第二文件” 读F2
DIFF -s F1 F2#打印如果两个文件都相同
'的diff -u file1的file2'注:DIFF的输出可以(并将)可以由所使用的'patch'程序将file1编辑成file2(反之亦然) – wildplasser