BASH 文字列から値を取得する

BASH 文字列から値を取得する

この文字列を変数に格納しています

<li class="rainbow-list-item southern disrupted " data-line-id="lul-southern" data-severity-codes="4,6,9" data-mode="national-rail">

そして、データ重大度コードには数値のみを取得したいと思います。次の点に留意してください。

  1. 数値は1、2、または3文字です
  2. データラインIDの長さの変更

答え1

次のように実行できます:

$ MYVAR='<li class="rainbow-list-item southern disrupted " data-line-id="lul-southern" data-severity-codes="4,6,9" data-mode="national-rail">'
$ echo $MYVAR | tr ' ' '\n' | awk -F= '/data-severity-codes/ {print $2}'
"4,6,9"

必要に応じて、sed を使用して " を削除し、 を空白に置き換えることもできます。

$ echo $MYVAR | tr ' ' '\n' | awk -F= '/data-severity-codes/ {print $2}' | sed -e 's/"//g' -e 's/,/ /g'
4 6 9

答え2

マッチング演算子を使用できます=~:

#! /bin/bash
var='<li class="rainbow-list-item southern disrupted " data-line-id="lul-southern" data-severity-codes="4,6,9" data-mode="national-rail">'

if [[ $var =~ data-severity-codes=\"([^\"]+)\" ]] ; then
    echo ${BASH_REMATCH[1]}
fi

出力:

4,6,9

または、XML 対応ツールを使用します。

xmllint --xpath li/@data-severity-codes - <<< "$var</li>" \
| cut -f2 -d\"

関連情報