Я создаю xmltv.xml для телепередач и мне нужно использовать SED для некоторой постобработки. Я использую Windows 10 с SED для Windows, запускаемой через bat-файл. Проблема в том, что только некоторые теги отображаются на моем интерфейсе, поэтому мне нужно объединить подзаголовок с desc в xml. У меня есть текущая команда SED, которую я запускаю, чтобы добавить подзаголовок к заголовку, но не могу найти подзаголовок для desc.

Так выглядит канал в xml, но не у всех программ есть подзаголовок.

  <programme start="20160422223500 -0500" stop="20160422233700 -0500" channel="Channel_ID">
<title lang="en">Program Name</title>
<sub-title lang="en">Subtitle Example</sub-title>
<desc lang="en">Description Example</desc>

Так я бы добавил хоккейную команду из подзаголовка в заголовок, используя sed.txt

CMD

sed.exe -f sed.txt <"xmltv.xml"> "xmltv2.xml"

sed.txt

:a;N;$!ba;s/\(<programme[^<]*\)\(<t[^>]*>\)\(NHL Hockey*[^<]*\)\(<[^<]*\)\(<sub-title[^>]*>\)\([^<]*\)[^<\/programme]*/\1\2\3: \6\4\5\6/g

Может ли кто-нибудь предоставить команду, подобную приведенной выше, чтобы добавить подзаголовок к desc, как это?

<desc lang="en">Subtitle Example : Description Example</desc>

1 ответ1

0
sed -nr '/sub-title/ {N;s,/desc,&,;Tprint;s,<sub-title[^>]+>(.*)</sub-title>\n(<desc[^>]+>)(.*</desc>),\2\1 : \3,;:print};p' <<<'<programme start="500 -05" stop="700 -5" channel="Channel_ID">
<title lang="en">Program Name</title>
<sub-title lang="en">Subtitle Example</sub-title>
<desc lang="en">Description Example</desc>

<programme start="600 -05" stop="800 -5" channel="Channel_ID">
<title lang="en">Program Name foo</title>
<desc lang="en">Description Example bar</desc>
> '
<programme start="500 -05" stop="700 -5" channel="Channel_ID">
<title lang="en">Program Name</title>
<desc lang="en">Subtitle Example : Description Example</desc>

<programme start="600 -05" stop="800 -5" channel="Channel_ID">
<title lang="en">Program Name foo</title>
<desc lang="en">Description Example bar</desc>

Это решение GNU/Linux sed, но я думаю, что его легко адаптировать к Windows. Вы можете попробовать использовать другой разделитель для подстановки и параметр -r для расширенного регулярного выражения, чтобы избежать \/ \( \) . Я написал несколько буквенных тегов ( </sub-title> </desc>), поэтому, если есть какие-то дополнительные пробелы, вам придется адаптировать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .