Сравнить текст в Unix - PullRequest
       2

Сравнить текст в Unix

0 голосов
/ 02 марта 2012

Я пытаюсь сравнить два текста в Unix.Я попробовал ниже.Это не сработало.При необходимости сравнить первую и последнюю строки файла.

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

Конечно, что-то упущено.Пожалуйста, помогите.

Ответы [ 4 ]

1 голос
/ 02 марта 2012

Предполагая, что вы используете "своего рода" оболочку Борна, вы должны (а) заключить в кавычки переменные и (б) использовать один =:

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

Обновление В ответ на некоторые комментарии это также будет работать, если $firstline равно -z. Даже в этом случае оператор if не интерпретируется как if [ -z ... ], по крайней мере в ksh (Korn Shell) или в Bash (у меня нет системы с простой оболочкой Борна sh доступно).

1 голос
/ 02 марта 2012

Возможно, проще ...

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. Командные строки head и tail отличаются для Linux и Solaris.

0 голосов
/ 02 марта 2012

Как минимум, вы должны заключать в кавычки расширения переменных. Кроме того, вы должны добавить префикс, чтобы избежать проблем, если строки начинаются с -. И правильный оператор - =. Так и должно быть

if [ "x$firstline" = "x$lastline" ]
0 голосов
/ 02 марта 2012

Должно быть if [ "$firstline" = "$lastline" ]

Если вы опустите двойные кавычки, это не сработает, если строки содержат белые символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...