我有下面的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>发布于 2018-01-04 03:05:31
创建新文件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>发布于 2018-01-03 22:08:04
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发布于 2018-01-04 02:33:15
不要使用正则表达式解析或编辑XML。它不能可靠地工作,也不能可靠地工作--即使你确实破解了一些“有效”的东西,即使是输入XML文件中的微小变化或意外变化也会破坏任何仅限正则表达式的脚本。
相反,可以使用以下两种方法:
perl或python (或许多其他语言)。如果您确实必须使用sed或awk,那么使用xml2将XML数据转换成适合使用这些工具处理的面向行的格式,然后使用2xml将其转换回格式正确的XML。例如:
xml2 < yourxmlfile | your sed/awk script here | 2xml > newxmlfilehttps://unix.stackexchange.com/questions/414647
复制相似问题