sed 명령은 파일 형식을 변경하지 않고 한 줄을 여러 줄로 바꿉니다.

sed 명령은 파일 형식을 변경하지 않고 한 줄을 여러 줄로 바꿉니다.

다음 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>

관련 정보