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>