比较Unix中的文本

时间:2012-03-02 09:03:16

标签: shell unix

我想在Unix中比较两个文本。我试过以下。它没用。需要比较文件的第一行和最后一行。

firstline=`head -1 test.txt`
echo $firstline
lastline=`tail -1 test.txt`
echo $lastline
if [ $firstline == $lastline ]
then
   echo "Found"
fi

当然,我错过了一些东西。请帮忙。

4 个答案:

答案 0 :(得分:1)

假设您正在使用“某种”bourne shell,您应该(a)引用变量,(b)需要使用单个=

if [ "$firstline" = "$lastline" ]
then
   echo "Found"
fi

更新在回复一些评论时,如果$firstline-z,这也会有效。即使在这种情况下,if语句解释为if [ -z ... ],至少在ksh(Korn Shell)或Bash中(我没有一个带有普通的bourne shell sh可用。)

答案 1 :(得分:1)

也许更简单......

bash-3.2$ if [ "$(sed -n '1p' file)" = "$(sed -n '$p' file)" ]; then
    echo 'First and last lines are the same'
else
    echo 'First and last lines differ'
fi

更新以回答Jan的问题。

bash-3.2$ cat file
-z
-G
bash-3.2$ if [ "$(sed -n '1p' file)" = "$(sed -n '$p' file)" ]; then
>     echo 'First and last lines are the same'
> else
>     echo 'First and last lines differ'
> fi
First and last lines differ

我更喜欢sed来获取文件的第一行和最后一行,因为相同的命令行适用于Linux,Mac OS和Solaris。 Linux和Solaris之间的headtail命令行不同。

答案 2 :(得分:0)

应为if [ "$firstline" = "$lastline" ]

如果省略双引号,如果行包含白色字符,则无法使用。

答案 3 :(得分:0)

至少,你必须引用变量扩展。另外,如果字符串以-开头,则应添加前缀以避免出现问题。正确的运算符是=。所以它应该是

if [ "x$firstline" = "x$lastline" ]