在bash中从String中提取数字

时间:2013-10-18 20:59:21

标签: linux string bash awk

我想从字符串中提取一个数字,并将该数字用于将来的计算

while IFS= read line ; do  

  if [[ "$line" == Content-Length* ]]
  then
  size=$(echo "$line" | awk '{print $2}')   
  echo "$size"
  let size=$size+1  
  echo "$size"
  break
  fi    
done <files

个文件有

Content-Length: 4806

但输出看起来像这样

4806
+1")syntax error: invalid arithmetic operator (error token is "
4806

我尝试了这个超过5小时,但可以找到为什么会发生这种情况。有人告诉我为什么

2 个答案:

答案 0 :(得分:2)

您可以利用Content-Length: 4806实际上是以空格分隔的字符串对的事实。

while read -r field value; do
    if [ "$field" = "Content-Length" ]; then
        echo "$size"
        echo "$((size+1))"
    fi
done < files

要解决DOS行结尾的问题,可以通过dos2unix或其他工具运行文件来修复行结尾,或使用

修剪回车符
size=${size%.}

将从其值中删除size的最终字符。建议修复文件,而不是围绕它编码。

答案 1 :(得分:0)

你可以替换:

let size=$size+1

let size=$[$size+1]

let size=$[size+1]

let size++

let size=`expr $size + 1`

所有示例在ubuntu 13.04上运行正常,你也是例子。