다음 XML 파일이 있습니다
cat example.xml
<?xml version="1.0" encoding="UTF-8"?>
<TestConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Text>
<Checking state="BOOT" />
<function name="configure" type="test" username="user1" num="1" Mode="NA" Type="OPEN" txt="NA-TO" TextType="guest" who="BANANNA"/>
<function name="configure" type="test" username="user2" num="2" Mode="YA" Type="DYNAMIC-WEP" txt="NA-TO" TextType="employee" who="BANANNA" />
<function name="configure" type="test" username="user3" num="3" Mode="YA" Type="DYNAMIC-WEP" txt="NA-TO" TextType="employee" who="BANANNA"/>
<function name="configure" type="test" username="user4" num="4" Mode="YA" Type="WPA2-PSK" txt="CA-TO" TextType="employee" who="BANANNA">
<parameters name="_key" value="password" isit="true" />
</function>
<function name="configure" type="test" username="user5" num="5" Mode="YA" Type="WPA2-PSK" txt="CA-TO" TextType="employee" who="BANANNA">
<parameters name="_key" value="password" isit="true" />
</function>
<function name="configure" type="test" username="user6" num="7" Mode="YA" Type="WPA2-PSK" TextType="employee" who="BANANNA">
<parameters name="_key" value="password" isit="true" />
</function>
</Text>
</TestConfig>
이 파일에서 5번째 줄을 다음으로 변경하고 싶습니다.
<function name="configure" type="test" username="user1" num="1" Mode="NA" Type="OPEN" txt="NA-TO" TextType="guest" who="BANANNA"/>
도착하다
<function name="configure" type="test" username="user1" num="1" Mode="YA" Type="WPA2-PSK" txt="NA-TO" TextType="guest" who="BANANNA">
<parameters name="_key" value="password" isit="true" />
</function>
답변1
awk 'NR!=5{print} NR==5{ print " <function name=\"configure\" type=\"test\" username=\"user1\" num=\"1\" Mode=\"YA\" Type=\"WPA2-PSK\" txt=\"NA-TO\" TextType=\"guest\" who=\"BANANNA\">"; print " <parameters name=\"_key\" value=\"password\" isit=\"true\" />"; print ""}' /path/to/some.xml
답변2
XML을 구문 분석하거나 편집하는 데 정규식을 사용하지 마세요. 안정적으로 작동하지 않으며 안정적으로 작동하게 할 방법이 없습니다. "작동하는" 항목을 수정하더라도 입력 XML 파일의 작거나 예상치 못한 변경으로 인해 정규식 전용 스크립트가 중단될 수 있습니다.
대신 다음을 사용하세요.
perl
또는 (또는 기타 여러 언어) 과 같은 프로그래밍 언어python
에는 XML 구문 분석 라이브러리가 있습니다.- 이와 같은 명령줄 도구xmlstarlet, 대부분의 Linux 배포판 및 기타 UNIX 유사 시스템용으로 사전 패키지로 제공됩니다.
반드시 사용해야 하는 경우 sed
또는 awk
을 사용하세요.XML2XML 데이터를 이러한 도구를 사용하여 처리하기에 적합한 행 기반 형식으로 변환한 다음 2xml
다시 올바른 형식의 XML로 변환합니다. 예를 들어
xml2 < yourxmlfile | your sed/awk script here | 2xml > newxmlfile
답변3
newcontent.txt라는 새 파일을 만듭니다. 교체하려는 콘텐츠를 입력하세요.
Cat new content.txt
<function name="configure" type="test" username="user1" num="1" Mode="YA" Type="WPA2-PSK" txt="NA-TO" TextType="guest" who="BANANNA">
<parameters name="_key" value="password" isit="true" />
</function>
요구 사항에 따라 콘텐츠를 바꾸려면 다음 명령을 사용하십시오.
sed '5r newcontent.txt' example2.txt | sed ‘5d'.
example2.txt==> 원본 입력 파일
newcontent.txt==> 교체해야 할 콘텐츠가 포함되어 있습니다.
산출
<?xml version="1.0" encoding="UTF-8"?>
<TestConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Text>
<Checking state="BOOT" />
<function name="configure" type="test" username="user1" num="1" Mode="YA" Type="WPA2-PSK" txt="NA-TO" TextType="guest" who="BANANNA">
<parameters name="_key" value="password" isit="true" />
</function>
<function name="configure" type="test" username="user2" num="2" Mode="YA" Type="DYNAMIC-WEP" txt="NA-TO" TextType="employee" who="BANANNA" />
<function name="configure" type="test" username="user3" num="3" Mode="YA" Type="DYNAMIC-WEP" txt="NA-TO" TextType="employee" who="BANANNA"/>
<function name="configure" type="test" username="user4" num="4" Mode="YA" Type="WPA2-PSK" txt="CA-TO" TextType="employee" who="BANANNA">
<parameters name="_key" value="password" isit="true" />
</function>
<function name="configure" type="test" username="user5" num="5" Mode="YA" Type="WPA2-PSK" txt="CA-TO" TextType="employee" who="BANANNA">
<parameters name="_key" value="password" isit="true" />
</function>
<function name="configure" type="test" username="user6" num="7" Mode="YA" Type="WPA2-PSK" TextType="employee" who="BANANNA">
<parameters name="_key" value="password" isit="true" />
</function>
</Text>
</TestConfig>