bash将整数添加到字符串

时间:2013-06-06 12:29:49

标签: bash sed

我已经把头撞到了墙上2个小时但是不能正常工作。
这就是我所拥有的:

  • 字符串,比方说133," \ r"最后,所以它是" 133 \ r"。
  • 整数,我想添加到上面字符串中的数字。

我尝试过删除" \ r"使用来自该字符串的sed和(())希望数学表达式将截断" \ r"但仍然没有成功。请指出我的错误!

提前致谢!
下面是我从中读取字符串的文件,让我们假装我被迫阅读所有文件(Notepad ++中的屏幕截图)。

6 个答案:

答案 0 :(得分:4)

您可以使用 awk

awk 'BEGIN { var="133\r"; print var+3; }'

输出136

或者您可以使用 bash 参数展开:

VAR="133\r"
VAR2=${VAR%\\r}
echo $VAR

输出:133,现在VAR2包含\r被剥离的数字,您可以为其添加整数。

答案 1 :(得分:3)

不需要sed只删除子字符串。 bash可以为您完成。

#!/usr/bin/env bash

mystr="133\r"
myint=2

newstring=${mystr%\\r}               # Remove the substring "\r" from $mystr
myanswer=$(expr $newstring + $myint) # Add the two numbers
echo $myanswer                       # 135

答案 2 :(得分:3)

$ a=$'133\r'
$ printf "%s" "$a" | od -c
0000000   1   3   3  \r
0000004
$ echo $((a+3))
")syntax error: invalid arithmetic operator (error token is "
$ echo $(( ${a%[[:space:]]} + 3 ))
136

答案 3 :(得分:2)

简单的解决方案

a="133\r"
b=${a/\\r/}

甚至更简单

b=${a%\\r}

chepner

建议

答案 4 :(得分:1)

您可以使用sed作为

获取号码
sed 's/\([0-9]*\).*/\1/'

答案 5 :(得分:1)

如果你想用sed删除\ r,不要忘记逃避\,这对我有用:

echo "133\r" | sed 's/\\r//' 

和输出133

编辑:

正如我在评论中所说:“LF对应于\ n,而不是\ r!!!! LF用于unix系统,\ r用于dos,对应CR(参见此处:en.wikipedia.org/wiki /行)“

所以你应该试试这个:

echo "133\n" | sed 's/\\n//'