如何从shell脚本中的变量中删除回车符和换行符

时间:2013-03-20 09:58:52

标签: shell unix

我是shell脚本的新手。我正在使用source命令获取一个在Windows中创建并具有回车符的文件。在我附加一些字符后,我来源,它总是来到行的开头。

test.dat(最后有回车符):

testVar=value123

testScript.sh(文件来源):

source test.dat
echo $testVar got it

我得到的输出是

got it23

如何从变量中删除'\r'

6 个答案:

答案 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 expansionANSI-C quoting(需要Bash):

testVar=${testVar//$'\r'}

应该导致的结果

$ printf '%q\n' "$testVar"
value123