我试图遍历日志文件并抓取一部分字符串。
日志文件包含:
Variable_name Value
Slave_running ON
首先,我需要查看当前行是否包含子串Slave_running
(从位置0开始,长度为13个字符)。如果我得到一个匹配,那么我需要测试同一个字符串(14:2)右边的字符是什么。
这是我首次将子字符串打印到控制台的微弱尝试:
while read p; do
echo ${$p:0:13}
done <slaverunning.log
返回:
syntax error near unexpected token `done'.
我对bash substring语法错误的原因是什么?
答案 0 :(得分:2)
首先,您的代码问题仅仅是一个语法问题,您$
之前p
只需要{
之前的while read p; do
echo ${p:0:13}
done < slaverunning.log
。以下应该按预期工作:
awk '/^Slave_running/ { if ($2 == "ON") { print "running"; } }' slaverunning.log
那就是说,awk似乎更适合这个问题,就像这样:
parseFloat(document.getElementById("weight")).value
Bash字符串操作函数的一个很好的演练:http://www.thegeekstuff.com/2010/07/bash-string-manipulation/
熟悉Awk的好地方:http://www.grymoire.com/Unix/Awk.html
答案 1 :(得分:1)
存在语法错误,但它与意外令牌无关......
$p
内的${...}
错误,这应该会出现bad substitution
错误:
echo ${$p:0:13}
修复后,您的脚本应该可以正常工作:
while read p; do
echo ${p:0:13}
done <slaverunning.log