我有以下文件
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/usr/local/texlive/2017/texmf-dist/fonts/opentype</dir>
<dir>/usr/local/texlive/2017/texmf-dist/fonts/truetype</dir>
<dir>/usr/local/texlive/2017/texmf-dist/fonts/type1</dir>
</fontconfig>
Run Code Online (Sandbox Code Playgroud)
我必须添加以下几行:
<dir>/usr/local/texlive/texmf-local</dir>
<dir>/usr/local/share/fonts</dir>
Run Code Online (Sandbox Code Playgroud)
在结束标记 /fontconfig> 之前。我不确定它是否总是在第 7 行,所以我必须将它作为一个字符串来查找。我在使用 <> 和 / 的这些字符串中遇到了一些麻烦……我如何用 sed 解决?谢谢
不要使用sed
,awk
等来解析 XML/HMTL 数据 - 它永远不会得到健壮和可扩展的结果。使用适当的 XML/HTML 处理器。
使用xmlstarlet
工具的正确方法:
xmlstarlet ed -s '//fontconfig' -t elem -n 'dir' -v '/usr/local/texlive/texmf-local' \
-s '//fontconfig' -t elem -n 'dir' -v '/usr/local/share/fonts' input.xml
Run Code Online (Sandbox Code Playgroud)
输出:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/usr/local/texlive/2017/texmf-dist/fonts/opentype</dir>
<dir>/usr/local/texlive/2017/texmf-dist/fonts/truetype</dir>
<dir>/usr/local/texlive/2017/texmf-dist/fonts/type1</dir>
<dir>/usr/local/texlive/texmf-local</dir>
<dir>/usr/local/share/fonts</dir>
</fontconfig>
Run Code Online (Sandbox Code Playgroud)
要就地修改/编辑文件- 添加-L
选项:xmlstarlet ed -L ....
有关更多详细信息,请键入: xmlstarlet ed --help