我想比較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