3

我已经用头撞墙了 2 个小时,但无法正常工作。
这是我所拥有的:

  • 字符串,比如 133,末尾有“\r”,所以它是“133\r”。
  • 整数,我想从上面的字符串中添加到数字中。

我尝试使用 sed 从该字符串中删除带有 sed 的 "\r" 并只删除 (( )),希望数学表达式会截断 "\r" 但仍然没有成功。请指出我的错误!

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

4

6 回答 6

4

你可以使用awk

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

输出136

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

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

输出:133,所以现在它VAR2包含被剥离的数字,\r你可以向它添加一个整数。

于 2013-06-06T12:32:54.947 回答
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
于 2013-06-06T12:43:36.677 回答
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
于 2013-06-06T13:00:52.447 回答
2

简单的解决方案

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

甚至更简单

b=${a%\\r}

正如chepner所建议的那样

于 2013-06-06T12:35:56.507 回答
1

您可以使用 sed 作为

sed 's/\([0-9]*\).*/\1/'
于 2013-06-06T12:33:34.067 回答
1

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

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

并输出 133

编辑 :

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

所以你应该试试这个:

echo "133\n" | sed 's/\\n//' 
于 2013-06-06T12:36:30.563 回答