Если у вас есть опция grep -A
, упомянутая в ответе выше, и команда Unix tr
в вашей системе, вы можете сделать что-то достаточно надежное.
Эта команда должна получить соответствующее значение:
grep -A2 '<e2ber>' one.xml | \
tr -d '\n' | \
sed -n -E -e 's/.*<e2ber>[[:blank:]]*([0-9][0-9]*)[[:blank:]]*<\/e2ber>.*/\1/p'
Это должно работать независимо от того, отформатирован ли файл XML как <e2ber>0</e2ber>
или как
<e2ber>
0
</e2ber>
Программа grep захватит достаточно строк, чтобы включить закрывающий тег, tr сделает этотдлинная строка, и sed извлечет значение.Я обновил регулярное выражение в sed, чтобы игнорировать пробелы вокруг значения.
Это может по-прежнему иметь проблемы, если XML-файл имеет двойной интервал -eg
<e2ber>
0
</e2ber>
Вы можете обойтиэто путем запуска файла XML через tr -s '\n'
заранее.Это сожмет несколько новых строк в одну новую строку.