2013-03-20 404 views
15

我是shell脚本的新手。我使用在Windows中创建的源命令来源文件,它有回车。在我追加一些字符的时候,它会一直到行的开头。如何从shell脚本中的变量中删除回车符和换行符

test.dat (which has carriage return at end) 
testVar=value123 

testScript.sh (sorces above file) 
source test.dat 
echo $testVar got it 

我得到的输出是

got it23 

我怎样才能把变量的 '\ r'。任何帮助都将非常可观。

回答

4

使用的脚本文件这个命令将其复制到Linux/Unix的

perl -pi -e 's/\r//' scriptfilename 
+0

由于一吨用于' perl'。我无法下载'dos2unix','tr'不能工作,什么不可以!非常感谢! – 2018-01-26 16:55:52

10

后,您可以使用SED如下:

MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g') 
    echo ${MY_NEW_VAR} got it 

编辑

顺便说一句试试在你的数据文件上做一个“dos2unix”。

32

另一个解决方案采用tr

echo $testVar | tr -d '\r' 
cat myscript | tr -d '\r' 

选项-d代表delete

2

管到sed -e 's/[\r\n]//g'从对于纯壳溶液每个文本行

+2

你不能使用sed来移除'\ n'。请参阅http://sed.sourceforge.net/sedfaq5.html#s5.10 – Bryan 2017-05-15 10:14:19

0

删除这两个回车返回(\r)和换行(\n),而不调用外部程序:

NL=$'\n' # define a variable to reference 'newline' 

testVar=${testVar%$NL} # removes trailing 'NL' from string