为什么我的Shell字符串中的输出不正确?

时间:2018-03-09 06:58:13

标签: linux shell grep

脚本如下:

a=`sed '/^project_folder=/!d;s/.*=//' conf.ini | tr -d '\r'`
b=`sed '/^version.versionLicense=/!d;s/.*=//' conf.properties`

path=${a}/${b}/env/123456/bin
echo $path

conf.ini的内容为project_folder=/data/AUTO-PUBLISH/iPEMS_01

conf.properties的内容为version.versionLicense=3.1.0.3

输出为/env/123456/binISH/iPEMS_01/3.1.0.3

我的预期输出为/data/AUTO-PUBLISH/iPEMS_01/3.1.0.3/env/123456/bin

为什么会这样?

2 个答案:

答案 0 :(得分:1)

你不应该使用sed来做你正在做的事情grep就足够了,你可以在下面看到:

$ more conf.properties conf.ini 
::::::::::::::
conf.properties
::::::::::::::
version.versionLicense=3.1.0.3
::::::::::::::
conf.ini
::::::::::::::


$ grep -oP '(?<=^project_folder=).*' conf.ini | tr -d '\r'
/data/AUTO-PUBLISH/iPEMS_01

$ grep -oP '(?<=version\.versionLicense=).*' conf.properties | tr -d '\r' 
3.1.0.3

您的脚本变为:

a=$(grep -oP '(?<=^project_folder=).*' conf.ini | tr -d '\r')                                                                                
b=$(grep -oP '(?<=version\.versionLicense=).*' conf.properties | tr -d '\r')
path=${a}/{$b}/env/123456/bin
echo $path

输出是:

/data/AUTO-PUBLISH/iPEMS_01/{3.1.0.3}/env/123456/bin

答案 1 :(得分:0)

conf.properties将有\ r \ n,它现在将成为$ path的一部分。