我写了一个脚本,在这个脚本中我编写了一个接受类似id的参数的函数,并且在我从一个给定文件中逐行读取的函数中,文件行格式是:
id_num name number_of_brothers other_people_id(可选) (也可以在每两个单词之间和开头之间有多个空格)
例如:
236501 james show 3 234247 234125
(id号码必须只包含6位数字,名称最后可以有一个数字,但兄弟的数量必须在0-10之间) 在这个例子中,名称是:" james show" 另一个例子:
236501 james show 3 4 234247 234125
这次的名字是" james显示3" 现在我想逐行阅读并查看哪一行以给定参数开头并打印名称..
!现在为了从给定文件中逐行读取我使用的实线,最后我做了done < "$given_file"
但是当我从bash运行脚本时,我得到了这个错误:
意外令牌附近的语法错误`}&#39; 我在脚本中使用的以下函数的最后一行中得到此错误:
function get_name{
while read -a line; do
l=`echo $line`
if [[ `grep ^"$1" "$line"` != " " ]]; then
l=`cut -d" " -f2-`
i=1
while(( i>0 )) ; do
if (( ${line[i]}>=0 && $${line[i]}<11 && ( ${line[i+1]} == " " || `get_num ${line[i+1]}` == 6 ))) ; then
l=`cut -d " " -f1-i`
echo "$l"
break
fi
let i++
done
fi
done < "$given_file"
} ## here i get the error
我在阅读文件时做错了什么?
答案 0 :(得分:1)
如果你只是想完成这项工作,那就不过是一个班轮。
function get_name {
sed -n -r "s/^$1 (.*) [0-9]{1,2}( [0-9]{6})*/\1/p" "$given_file"
}
测试
$ echo 236501 james show 3 4 234247 234125 | sed -n -r 's/^236501 (.*) [0-9]{1,2}( [0-9]{6})*/\1/p'
james show 3