Как для редактирования текста в определенных тегах в указанных файлах для использования заглавных букв в содержимом

Рабочий стол Ubuntu 20.04

Каталог содержит файлы с разными расширениями.

Некоторые из файлов имеют расширение .nfo. Они содержат метаданные о видеофайлах для системы Kodi.

Эти файлы .nfo содержат структурированный текст под заголовком

Текст в файлах может содержать один, два или все три из следующих тегов:

<title>Some example text</title>
<showtitle>Some example text</showtitle>
<originaltitle>Some example text</originaltitle>

Есть ли команда (или сценарий), которая:

Находит эти теги в файлах .nfo в каталоге. Если они существуют и содержат текст, используйте заглавную первую букву каждого слова, содержащегося в каждом теге, и обновите тот же файл отредактированным содержимым.

?

Спасибо!

-1
задан 7 December 2020 в 16:54

1 ответ

Предполагая, что файлы .ngo представляют собой XML, вероятно, правильным способом сделать это будет использование XML-инструмента, такого как xmlstarlet, для преобразования ваших данных в соответствии с подходящим шаблоном XLST.

Однако, если вам просто нужно что-то быстрое и грязное, то, возможно, с Perl:

perl -lpe 's@(?<=<title>)(.*)(?=</title>)@join " ", map { ucfirst $_ } split(/\s+/,$1)@e'

Пример. учитывая следующий file.ngo, основанный на файле шаблона Kodi .nfo

$ cat file.nfo
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<movie>
    <title>Some example text</title>
    <showtitle>Some example text</showtitle>
    <originaltitle>Some example text</originaltitle>
    <userrating>0</userrating>
    <outline></outline>
    <plot></plot>
    <tagline></tagline>
    <runtime></runtime>
    <mpaa></mpaa>
    <uniqueid type="" default="true"></uniqueid>
    <genre></genre>
    <country></country>
    <credits></credits>
    <director></director>
    <premiered></premiered>
    <studio></studio>
    <actor>
        <name></name>
        <role></role>
        <order></order>
        <thumb></thumb>
    </actor>
</movie>

,затем

$ perl -lpe 's@(?<=<title>)(.*)(?=</title>)@join " ", map { ucfirst $_ } split(/\s+/,$1)@e' file.nfo
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<movie>
    <title>Some Example Text</title>
    <showtitle>Some example text</showtitle>
    <originaltitle>Some example text</originaltitle>
    <userrating>0</userrating>
    <outline></outline>
    <plot></plot>
    <tagline></tagline>
    <runtime></runtime>
    <mpaa></mpaa>
    <uniqueid type="" default="true"></uniqueid>
    <genre></genre>
    <country></country>
    <credits></credits>
    <director></director>
    <premiered></premiered>
    <studio></studio>
    <actor>
        <name></name>
        <role></role>
        <order></order>
        <thumb></thumb>
    </actor>
</movie>
1
ответ дан 4 December 2020 в 23:47

Другие вопросы по тегам:

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