다음 파일이 있습니다
<?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>가 있습니다. 항상 일곱 번째 줄에 있는지 확실하지 않으므로 문자열로 찾아야 합니다. <> 및 /와 관련된 문자열에 문제가 있습니다... 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>