我有配置文件,包含数千个参数 有时我们会错误地将值设置为一些额外的空格,如下例
# 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”
我们想要的只是在文件开始之前和文件结束之后删除空格
答案 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]}