@snofroy

Парсинг файла bash?

Добрый день коллеги, помогите разобраться.

У меня есть файл конфигурации от сервера Lenovo, мне необходимо её проверить.

В файле, к примеру, есть строка:

SystemName: S4BZJ045

В скрипте bash я создаю переменную которая вытаскивает из этой строки S4BZJ045 следующим образом:

SystemName=$(cat server_out.db | grep 'SystemName' | awk '{print $2}' )


И дальше я пытаюсь проверить совпадает ли переменная SystemName c переменной Sys:

Sys=S4BZJ045

if [[ $Sys == $SystemName ]]
then
  echo "Ok"
else
  echo "NotOK"


В ответ получаю NotOK, я понимаю, что проблема в лишних символах в переменной SystemName. Проверял через WC:

sys S4BZJ045
      1       1       9
SystemName S4BZJ045
      1       1      11


Пробовал применить sed к переменной SystemName, результат такой же.

SystemName=$(cat server_out.db | grep 'SystemName' | awk '{print $2}' | sed 's/^[[:space:]]*//')
  • Вопрос задан
  • 1642 просмотра
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
В скрипте bash я создаю переменную которая вытаскивает из этой строки S4BZJ045 следующим образом:
SystemName=$(cat server_out.db | grep 'SystemName' | awk '{print $2}' )

слишком многословная команда, можно сократить:
SystemName=$(awk '/SystemName/{printf $2}' server_out.db)


В ответ получаю NotOK, я понимаю, что проблема в лишних символах в переменной SystemName. Проверял через WC:

скорее всего проблема в переводе строки, print в конце ставит \n, чтобы этого избежать используйте printf
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Возьмите то что нужно регуляркой
SystemName=$(grep -oP "SystemName: \K[A-Za-z0-9]*" server_out.db)
if [ "$SystemName" == " S4BZJ045 ]; then
  echo "Ok"
else
  echo "Not Ok"
fi
Ответ написан
Комментировать
sotvm
@sotvm
Умный поймёт, а дураку и так всё равно.
в данном случае, здесь вторые кавычки [] лишние,
а в такие " кавычки, надыть завернуть переменные.
if [ "$Sys" == "$SystemName" ]
then
echo "Ok"
else
echo "NotOK"
fi
Ответ написан
Комментировать
ValdikSS
@ValdikSS
Наиболее вероятно, у вас файл с Windows-переносами CR LF.
Используйте dos2unix перед его обработкой, это должно устранить проблему.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы