如何获取字符顺序的两个字符之间的子字符串?
问题描述:
我有一个Unix shell脚本,我想获取_和 - 之间的子串,但不是 - 和_。如何获取字符顺序的两个字符之间的子字符串?
例子:
cs-ui-21140322175352_8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87-2.x86_64
我想提取:
8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87
并将其存储在一个变量。
答
你可以有更多的下注和其他东西比你的示例输入。 为您的样品输入,你可以做这样的事情
newvar=$(echo "${inputstr}" | sed -e 's/[^_]*_//' -e 's/-.*//')
# or
newvar=$(echo "${inputstr}" | sed -e 's/.*_\(.*\)-.*/\1/')
# or
newvar=$(echo "${inputstr}" | cut -d "_" -f2 | cut -d "-" -f1)
答
inputstr=cs-ui-21140322175352_8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87-2.x86_64
newvar=`echo $inputstr | sed 's,.*_\(.*\)-.*,\1,'`
+0
这看起来像我的第二个解决方案。请注意'$(cmd)'比backtics更安全,更简单。 –
我放在了第一位拿到64。第二个工作正常。最后一个给我一个错误:切:[-cf]列表:非法列表值 切:[-cf]列表:值可能不包括零 – Nelson
对不起,更正。第一个是贪婪的''*',只需要告诉吃除_以外的所有东西。剪切分隔符是选项d,而不是c。 –