我有一個Unix shell腳本,我想獲取_和 - 之間的子串,但不是 - 和_。如何獲取字符順序的兩個字符之間的子字符串?
例子:
cs-ui-21140322175352_8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87-2.x86_64
我想提取:
8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87
並將其存儲在一個變量。
我有一個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,'`
這看起來像我的第二個解決方案。請注意'$(cmd)'比backtics更安全,更簡單。 –
我放在了第一位拿到64。第二個工作正常。最後一個給我一個錯誤:切:[-cf]列表:非法列表值 切:[-cf]列表:值可能不包括零 – Nelson
對不起,更正。第一個是貪婪的''*',只需要告訴吃除_以外的所有東西。剪切分隔符是選項d,而不是c。 –