【发布时间】:2017-05-15 08:38:52
【问题描述】:
我需要帮助来解析字符串并提取以逗号分隔的单词并从 [] 括号内赋值。 输入字符串是这样的:
KEEP_DFB,?(y/n),[y];
DFB_VERSION,?(1.4.2/1.7.6),[1.4.2]:
预期的输出是
KEEP_DFB=y
DFB_VERSION=1.4.2
我可以使用 sed 实现的最接近的是:
echo 'KEEP_DFB,?(y/n),[y]:' | sed 's/\([^,]*,\).*,\([^,]*\):.*/\1=\2/'
但它没有给出预期的结果。
我也试过'cut',但结果和上面一样。 不允许使用 IFS 更改分隔符。 你能帮忙吗?
【问题讨论】:
-
模式
(y/n),[y]总是成立吗?我的意思是即使在(1.4.2/1.7.6),[1.4.2]中,[]中的值也与/中()中的值相同 -
@Sundeep:由于问题是关于捕获方括号之间的值,因此依赖样本数据中圆括号之间材料的相同部分与材料匹配的巧合是不明智的在方括号之间。
-
@JonathanLeffler 是的,我想是的,我没有完全阅读这个问题,已经准备好答案,然后在发布之前注意到我的假设......因此我要求澄清,因为解决方案会更简单......
-
当您使用它向用户询问值时,您可能会考虑另一种方法:使用参数
question options defaultvalue创建function askvalue并将其用作KEEP_DFB=$(askvalue "Do you want to keep DFB" "y/n" "y")。