我正在读取.ini文件中的值,有时可能会跟踪或引导空格。
如何修改第一行以防止这种情况?
db=$(sed -n 's/.*DB_USERNAME *= *\([^ ]*.*\)/\1/p' < config.ini);
echo -"$db"-
结果;
-myinivar -
我需要;
-myinivar-
答案 0 :(得分:2)
echo "=${db% }="
答案 1 :(得分:1)
你不需要捕获组内的.*
(或行尾的分号):
db="$(sed -n 's/.*DB_USERNAME *= *\([^ ]*\).*/\1/p' < config.ini)"
详细说明:
.*
匹配任何内容DB_USERNAME
匹配该文字字符串*
(单个空格后跟星号)匹配任意数量的空格=
匹配该文字字符串*
(单个空格后跟星号)匹配任意数量的空格\(
启动稍后用于\1
的捕获组
[^ ]
匹配不空格字符*
重复零次或多次\)
结束捕获组.*
匹配任何内容因此,结果将是DB_USERNAME =
之后的所有字符和任意数量的空格,直到下一个空格或行尾,以先到者为准。
答案 2 :(得分:1)
您可以使用echo
修剪空白:
db='myinivar '
echo -"$(echo $db)"-
-myinivar-
答案 3 :(得分:1)
使用crudini透明地处理这些ini文件边缘情况
db=$(crudini --get config.ini '' DB_USERNAME)
答案 4 :(得分:0)
要删除多个尾随空格,请使用%%从字符串末尾删除最长匹配模式
echo "=${db%% *}="