BASH erhält Wert aus Zeichenfolge

BASH erhält Wert aus Zeichenfolge

Ich habe diesen String in einer Variablen gespeichert

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

und ich möchte nur die numerischen Werte für die Datenschweregradcodes verwenden. Beachten Sie Folgendes:

  1. Die numerischen Werte sind 1,2 oder 3 Zeichen lang
  2. Die Längenänderung der Datenzeilen-ID

Antwort1

Sie können es so machen:

$ 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"

Sie können auch sed verwenden, um " zu entfernen und bei Bedarf durch ein Leerzeichen zu ersetzen:

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

Antwort2

Sie können den Matching-Operator verwenden =~:

#! /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

Ausgabe:

4,6,9

Oder verwenden Sie ein XML-fähiges Tool:

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

verwandte Informationen