如何在字符串开始之前和字符串结束之后删除空格

时间:2014-07-09 15:30:01

标签: linux bash awk sed

我有配置文件,包含数千个参数 有时我们会错误地将值设置为一些额外的空格,如下例

   # PARAM1="  /mnt/Config/EME/EM/Telecom TTI/VM rde.pcf "

因为我们得到了一些错误,例如

  # cp $PARAM1 /tmp
    cp: cannot stat `/mnt/Config/EME/EM/Telecom': No such file or directory
    cp: cannot stat `TTI/VM': No such file or directory
    cp: cannot stat `rde.pcf': No such file or directory

请建议如何在值开始前和值结束后删除空格

为了解决那些错误

例如

    PARAMETER="  /mnt/Config/EME/EM/Telecom TTI/VM rde.pcf "

解决方案可以如以下示例

  NEW_PARAMETER_WITHOUT_EXTRA_SPACE=` echo $PARAMETER | sed ....   `

预期结果:

  NEW_PARAMETER_WITHOUT_EXTRA_SPACE="/mnt/Config/EME/EM/Telecom TTI/VM rde.pcf"

。 。 。

  • 备注 - 空格可以在文件字符串之间,即OK

    例如

    FILE =“/ etc / Conf OF HOSTS / results.txt”

我们想要的只是在文件开始之前和文件结束之后删除空格

2 个答案:

答案 0 :(得分:2)

下面的sed命令将删除行开头或结尾处的所有空格

sed 's/^\s*\(.*\)\s*/\1/g' file

示例:

$ echo '      # PARAM1="  /mnt/Config/EME/EM/Telecom TTI/VM rde.pcf "       ' | sed 's/^\s*\(.*\)\s*/\1/g'
# PARAM1="  /mnt/Config/EME/EM/Telecom TTI/VM rde.pcf " 

答案 1 :(得分:1)

PARAM1="  /mnt/Config/EME/EM/Telecom TTI/VM rde.pcf "
read -r NEW_PARAMETER_WITHOUT_EXTRA_SPACE <<< "$PARAM1"   ## Do IFS=$' \t' read ... if IFS was altered.
echo "$NEW_PARAMETER_WITHOUT_EXTRA_SPACE"

输出:

/mnt/Config/EME/EM/Telecom TTI/VM rde.pcf

另:

shopt -s extglob
__=${PARAM1##+([[:blank:]])}
NEW_PARAMETER_WITHOUT_EXTRA_SPACE=${__%%+([[:blank:]])}

又一个:

[[ $PARAM1 =~ ^[[:blank:]]*(.*)[[:blank:]]*$ ]]
NEW_PARAMETER_WITHOUT_EXTRA_SPACE=${BASH_REMATCH[1]}