如何编辑指定文件中特定标签中的文本以使内容大写

如何编辑指定文件中特定标签中的文本以使内容大写

Ubuntu 20.04 桌面

目录包含具有不同扩展名的文件。

一些文件的扩展名为 .nfo。它们包含有关 Kodi 系统视频文件的元数据。

这些 .nfo 文件在标题下包含结构化文本<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

文件中的文本可能包含以下一个、两个或全部三个标签:

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

是否有一个命令(或脚本)可以:

在目录中的 .nfo 文件中查找这些标签。如果它们存在且包含文本,则将每个标签中包含的每个单词的首字母大写,并使用编辑后的内容更新同一文件。

谢谢!

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

相关内容