У меня эта строка хранится в переменной
<li class="rainbow-list-item southern disrupted " data-line-id="lul-southern" data-severity-codes="4,6,9" data-mode="national-rail">
и я хотел бы взять только числовые значения для data-severity-codes. Имейте в виду, что:
- Числовые значения состоят из 1, 2 или 3 символов.
- Изменение длины идентификатора строки данных
решение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\"