Чтобы получить значения между двумя словами, используя awk или sed - PullRequest
0 голосов
/ 20 сентября 2019

Я должен получить значение между двумя «ключевыми» словами, используя awk или sed, или, если это какой-то другой инструмент, я тоже в порядке.Я пробовал приведенный ниже код, я не получаю желаемый вывод.

echo "<response status = 'success'><result><key>LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=</key></result></response>" |  awk -v FS="key" 'NF>1{print $2}' 

Вывод, который я ожидаю:

LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

Вероятно, лучше использовать здесь выражение xpath:

echo '<response status="success"><result><key>LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=</key></result></response>' | \
xmllint --xpath '/response/result/key/text()' -

LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=
0 голосов
/ 20 сентября 2019

Просто исправьте свой разделитель полей FS:

echo ... |  awk -v FS="(<key>|</key>)" 'NF>1{print $2}' 
LUFRPhdfhhfufhroghyuefbFJyaEkwamhjMnRxVW9ZWT1854165442156744ZiZlljbjlHSlBjNXgwMzVJcz0=
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...