次のファイルがあります
<?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>
次の行を追加する必要がありました。
<dir>/usr/local/texlive/texmf-local</dir>
<dir>/usr/local/share/fonts</dir>
閉じるタグの前に/fontconfig>があります。常に7行目にあるかどうかはわかりません。文字列として見つける必要があります。 <>と/に関連する文字列に問題があります... sedでどのように解決できますか?ありがとう
答え1
sed
XML / HMTLデータを解析するためになどを使用しないでくださいawk
。強力でスケーラブルな結果は生成されません。適切な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
出力:
<?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>
ファイルの変更/編集所定の位置に- 追加された-L
オプション:xmlstarlet ed -L ....
詳細については、次のように入力してください。xmlstarlet ed --help
答え2
/
#
別の区切り文字を使用して、パターンテキストの問題を克服できます。
sed '\#^</fontconfig>#i\
<dir>/usr/local/texlive/texmf-local</dir>\
<dir>/usr/local/share/fonts</dir>
' file
<?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>