私はUnixシェルスクリプトを持っていますが、_と - の間で部分文字列を取得したいのですが、 - と_は必要です。文字の順序が重要な2文字間の部分文字列を取得する方法は?
例:
cs-ui-21140322175352_8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87-2.x86_64
私が抽出したい:
8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87
を変数に格納します。
私はUnixシェルスクリプトを持っていますが、_と - の間で部分文字列を取得したいのですが、 - と_は必要です。文字の順序が重要な2文字間の部分文字列を取得する方法は?
例:
cs-ui-21140322175352_8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87-2.x86_64
私が抽出したい:
8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87
を変数に格納します。
サンプル入力よりも多くのアンダースコアなどがある可能性があります。あなたは、私が最初のもので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)
inputstr=cs-ui-21140322175352_8ddjdb1b4cc4a87d17034dd3704q5a0ea60d6d87-2.x86_64
newvar=`echo $inputstr | sed 's,.*_\(.*\)-.*,\1,'`
これは私の2番目の解決策のようです。 '$(cmd)'はバッククエストよりも安全で簡単です。 –
ような何かを行うことができ、あなたのサンプル入力の場合 。 2つ目はうまくいった。最後のものは私にエラーを与えました:cut:[-cf] list:不正なリスト値 cut:[-cf] list:値にはゼロが含まれていません – Nelson
申し訳ありません。最初は貪欲な '。*'だったが、_を除くすべてを食べるように伝える必要がある。カット区切り文字は、cではなく、オプションdです。 –