我已经用头撞墙了 2 个小时,但无法正常工作。
这是我所拥有的:
- 字符串,比如 133,末尾有“\r”,所以它是“133\r”。
- 整数,我想从上面的字符串中添加到数字中。
我尝试使用 sed 从该字符串中删除带有 sed 的 "\r" 并只删除 (( )),希望数学表达式会截断 "\r" 但仍然没有成功。请指出我的错误!
提前致谢!
下面是我从中读取字符串的文件,让我们假设我被迫读取所有文件(来自 Notepad++ 的屏幕截图)。
你可以使用awk:
awk 'BEGIN { var="133\r"; print var+3; }'
输出136
或者您可以使用bash参数扩展:
VAR="133\r"
VAR2=${VAR%\\r}
echo $VAR
输出:133
,所以现在它VAR2
包含被剥离的数字,\r
你可以向它添加一个整数。
无需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
$ 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
您可以使用 sed 作为
sed 's/\([0-9]*\).*/\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//'