我是shell脚本的新手。我正在使用source
命令获取一个在Windows中创建并具有回车符的文件。在我附加一些字符后,我来源,它总是来到行的开头。
test.dat
(最后有回车符):
testVar=value123
testScript.sh
(文件来源):
source test.dat
echo $testVar got it
我得到的输出是
got it23
如何从变量中删除'\r'
?
答案 0 :(得分:44)
另一种解决方案使用tr
:
echo $testVar | tr -d '\r'
cat myscript | tr -d '\r'
选项-d
代表delete
。
答案 1 :(得分:14)
您可以按如下方式使用sed:
MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g')
echo ${MY_NEW_VAR} got it
顺便说一句,尝试对数据文件执行dos2unix
。
答案 2 :(得分:5)
将脚本文件复制到Linux / Unix后,在脚本文件中使用此命令
perl -pi -e 's/\r//' scriptfilename
答案 3 :(得分:3)
管道到sed -e 's/[\r\n]//g'
以从每个文字行中删除回车符(\r
)和换行符(\n
)。
答案 4 :(得分:1)
对于没有调用外部程序的纯shell解决方案:
NL=$'\n' # define a variable to reference 'newline'
testVar=${testVar%$NL} # removes trailing 'NL' from string
答案 5 :(得分:0)
由于您获取的文件以回车符结束,因此$testVar
的内容可能看起来像这样:
$ printf '%q\n' "$testVar"
$'value123\r'
(第一行的$
是shell提示符;第二行的$
来自%q
格式字符串,表示$''
quoting。)
要摆脱回车符,可以使用shell parameter expansion和ANSI-C quoting(需要Bash):
testVar=${testVar//$'\r'}
应该导致的结果
$ printf '%q\n' "$testVar"
value123