我想比较Unix中的两个文本。我尝试了下面。它没有工作。需要比较文件的第一行和最后一行。比较Unix中的文本
firstline=`head -1 test.txt`
echo $firstline
lastline=`tail -1 test.txt`
echo $lastline
if [ $firstline == $lastline ]
then
echo "Found"
fi
当然,我错过了一些东西。请帮忙。
我想比较Unix中的两个文本。我尝试了下面。它没有工作。需要比较文件的第一行和最后一行。比较Unix中的文本
firstline=`head -1 test.txt`
echo $firstline
lastline=`tail -1 test.txt`
echo $lastline
if [ $firstline == $lastline ]
then
echo "Found"
fi
当然,我错过了一些东西。请帮忙。
也许更简单...
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
更新回答简的问题。
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
命令行不同。
如果第一行是'-z',该怎么办? – 2012-03-02 09:18:27
为什么你在问题中使用'sed'而不是'head'和'tail'?在我看来,它的可读性较差,我没有看到任何优势。 – 2012-03-02 12:01:33
@JanHudec:好问题。我希望我的更新能为你提供帮助。 – Johnsyweb 2012-03-02 22:07:56
应该if [ "$firstline" = "$lastline" ]
如果省略了双引号,如果线(S)含有白色字符,它不会工作。
不,'-eq'用于比较整数,如果您尝试,则会得到类似于“...:整数表达式”的错误。 – 2012-03-02 09:11:27
是的,你是对的,只是修复它。 – sirgeorge 2012-03-02 09:12:24
如果第一行是'-z',该怎么办? – 2012-03-02 09:19:03
假设您正在使用“某种形式”的Bourne shell的,你应该(一)引用变量和(b)需要使用一个单一的=
:
if [ "$firstline" = "$lastline" ]
then
echo "Found"
fi
更新在回应一些评论如果$firstline
是-z
,这也将起作用。即使在这种情况下,if语句是而不是解释为if [ -z ... ]
,至少在ksh
(Korn Shell)或Bash(我没有可用的简单Bourne shell shell sh
的系统)。
为什么downvote? – 2012-03-02 09:13:52
如果第一行是'-z',该怎么办? (虽然我并不是那种低调的人)。 – 2012-03-02 09:18:53
@Jan Hudec:谢谢你试图澄清,但是这并没有伤害(至少它不会被解释为'[-z ...]')。 – 2012-03-02 09:23:17
至少,您必须引用变量扩展。另外,如果字符串以-
开头,则应添加前缀以避免出现问题。并且正确的运算符是=
。所以它应该是
if [ "x$firstline" = "x$lastline" ]
我很好奇。我无法用ksh或bash重现“-z Issue”(请参阅我的答案的更新)。它只发生在简单的老sh? (由于OP没有完全告诉哪个外壳)。 – 2012-03-02 09:51:54
“它没有工作”太含糊。究竟做了什么或没有做什么? – 2012-03-02 09:09:13
你在使用哪种外壳? – 2012-03-02 09:12:46