我想在Unix中比较两个文本。我试过以下。它没用。需要比较文件的第一行和最后一行。
firstline=`head -1 test.txt`
echo $firstline
lastline=`tail -1 test.txt`
echo $lastline
if [ $firstline == $lastline ]
then
echo "Found"
fi
当然,我错过了一些东西。请帮忙。
答案 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之间的head
和tail
命令行不同。
答案 2 :(得分:0)
应为if [ "$firstline" = "$lastline" ]
如果省略双引号,如果行包含白色字符,则无法使用。
答案 3 :(得分:0)
至少,你必须引用变量扩展。另外,如果字符串以-
开头,则应添加前缀以避免出现问题。正确的运算符是=
。所以它应该是
if [ "x$firstline" = "x$lastline" ]