2015-10-16 2 views
1

Я пытаюсь пройти через файл журнала и захватить часть строки.подстрока в bash failing: синтаксическая ошибка около неожиданного токена `done '.

Файл журнала содержит:

Variable_name Value 
Slave_running ON 

Сначала мне нужно, чтобы увидеть, если текущая строка содержит подстроку Slave_running (длиной 13 символов, начиная с позиции 0). Если я получаю соответствие, то мне нужно проверить, что символ справа от той же строки (14: 2).

Вот моя слабая попытка сначала просто напечатать подстроку утешать:

while read p; do 
    echo ${$p:0:13} 
done <slaverunning.log 

Это возвращает:

syntax error near unexpected token `done'. 

Что я получаю неправильно с Баш подстроки синтаксиса не так?

ответ

1

Там есть ошибка синтаксиса, но это не о неожиданной лексемы ...

$p внутри ${...} неправильно, это должно дать bad substitution ошибку:

echo ${$p:0:13} 

С этой фиксированной, ваш сценарий должно работать:

while read p; do 
    echo ${p:0:13} 
done <slaverunning.log 
2

Во-первых, проблема с кодом просто синтаксический один, вам не нужен $ до p, только до {. Ниже, должны работать, как ожидалось:

while read p; do 
    echo ${p:0:13} 
done < slaverunning.log 

Это говорит, AWK, кажется, лучше подходит для этой проблемы, что-то вроде этого:

awk '/^Slave_running/ { if ($2 == "ON") { print "running"; } }' slaverunning.log 

Большое прохождение функций обработки строк в Bash: http://www.thegeekstuff.com/2010/07/bash-string-manipulation/
Хорошее место для знакомства с Awk: http://www.grymoire.com/Unix/Awk.html

+0

My bad; ошибочно подчёркивает пробел - NVM – tripleee

Смежные вопросы