2016-03-24 7 views

答えて

2

サンプル入力よりも多くのアンダースコアなどがある可能性があります。あなたは、私が最初のもので64を得た

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) 
+0

ような何かを行うことができ、あなたのサンプル入力の場合 。 2つ目はうまくいった。最後のものは私にエラーを与えました:cut:[-cf] list:不正なリスト値 cut:[-cf] list:値にはゼロが含まれていません – Nelson

+0

申し訳ありません。最初は貪欲な '。*'だったが、_を除くすべてを食べるように伝える必要がある。カット区切り文字は、cではなく、オプションdです。 –

1
inputstr=cs-ui-21140322175352_8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87-2.x86_64 

newvar=`echo $inputstr | sed 's,.*_\(.*\)-.*,\1,'` 
+0

これは私の2番目の解決策のようです。 '$(cmd)'はバッククエストよりも安全で簡単です。 –