Выборка строкового значения из определенного тега в файле

У меня есть большой файл, содержащий сообщения, разделенные тегом <>.

Мне нужно получить весь тег (со значением). Смотрите пример ниже:

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

Какой будет команда для этого?

0
02.02.2017, 23:13
2 ответа

Если вы хотите, чтобы ввод и вывод были опубликованы, это может сработать, используя GNU grep и ваш файл с именем input :

<input grep '<tvd:BeefProductListStatus>[^<]*</tvd:BeefProductListStatus>' -o -m1 \
| head -n1

grep -o запрашивает вывод только той части, которая соответствует, [^ <] * предотвращает соответствие более чем одного экземпляра в той же строке и -m1 останавливается после первых совпадающих строк. Поскольку наличие двух экземпляров данных с тегами в одной строке приведет к тому, что grep выведет каждый из них, требуется head -n1 , чтобы сократить это до {{1} } только первое совпадение.

0
28.01.2020, 04:48
  1. изменить тег на \ n для работы в многострочном режиме
  2. извлечь значения в многострочном режиме и удерживать значения для удержания пробела
  3. заданная последняя строка возвращает значения из удерживаемого пространства в пространство шаблонов
  4. подстрока все значения с тегами и результатами печати

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>
0
28.01.2020, 04:48

Теги

Похожие вопросы