我已经头痛了两个小时,但还是没能使它正常工作。
以下是我的代码:
- 一个带有"\r"结尾的字符串,比如“133\r”。
- 一个整数,我想把它加到上面字符串的数字后面。
我试过用sed将该字符串中的"\r"删除,然后使用(( )),希望这个数学表达式会截去"\r",但仍然没有成功。请指出我的错误!
非常感谢您提前帮忙!
下面是我从中读取字符串的文件,让我们假装我被迫读取整个文件(来自Notepad ++的屏幕截图)。
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
expr: 非整数参数
。 - mr.nothing$(( newstring + myint ))
替换 expr
命令。 - chepner$(expr $newstring + $myint)
更改为$(( newstring + myint ))
时,它会显示“)2yntax error: invalid arithmetic operator (error token is "\r
。 - mr.nothing${mystr%?}
作为一种简单的标准方法来删除它。如果mystr
以除回车以外的其他内容结尾,则可以使用bash
特定的(虽然我相信它将被包含在标准中)${mystr%$'\r'}
。 - chepner$ 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
dos2unix
克隆:sed 's/\r$//' file | ...
- glenn jackman${a%\\r}
。 - chepnersed命令
sed 's/\([0-9]*\).*/\1/'
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//'
Syntax error: invalid arithmetic operator (error token is "\r")
。 - mr.nothingcurl
get
请求,因此即使我在这里列出它,也没有人能够使用它。请查看对我有效的已接受答案。 - mr.nothing