У меня есть большой файл, содержащий сообщения, разделенные тегом <>
.
Мне нужно получить весь тег (со значением). Смотрите пример ниже:
<tvd:HostProductListStatus>000</tvd:HostProductListStatus><tvd:BeefProductListStatus>000</tvd:BeefProductListStatus><tvd:CustomerBranding>CC</tvd:CustomerBranding><tvd:InquiryAllowed>true</tvd:InquiryAllowed>
Мне нужно получить и отобразить только следующий тег:значение из файла, независимо от того, появляется ли он несколько раз:
<tvd:BeefProductListStatus>000</tvd:BeefProductListStatus>
Какой будет команда для этого?
Если вы хотите, чтобы ввод и вывод были опубликованы, это может сработать,
используя GNU grep и ваш файл с именем input
:
<input grep '<tvd:BeefProductListStatus>[^<]*</tvd:BeefProductListStatus>' -o -m1 \
| head -n1
grep -o
запрашивает вывод только той части, которая соответствует, [^ <] *
предотвращает
соответствие более чем одного экземпляра
в
той же строке и -m1
останавливается после первых совпадающих строк. Поскольку
наличие двух экземпляров данных с тегами в одной строке приведет к тому, что
grep выведет каждый из них, требуется head -n1
, чтобы сократить это до {{1} } только первое совпадение.
sed -rn '
s/<tvd:BeefProductListStatus>/\n/g;
s/([^<]*).*/\1/Mg; H;
${ g; s/\n+/ /g;
s#\b(\w+)\b#<tvd:BeefProductListStatus>\1</tvd:BeefProductListStatus>\n#gp
}
' file
<tvd:BeefProductListStatus>000</tvd:BeefProductListStatus>
<tvd:BeefProductListStatus>111</tvd:BeefProductListStatus>
<tvd:BeefProductListStatus>000</tvd:BeefProductListStatus>