首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令可以在不更改文件格式的情况下重新放置一行多行。

命令可以在不更改文件格式的情况下重新放置一行多行。
EN

Unix & Linux用户
提问于 2018-01-03 21:45:40
回答 3查看 90关注 0票数 0

我有下面的xml文件

代码语言:javascript
复制
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行更改为

代码语言:javascript
复制
        <function name="configure" type="test" username="user1" num="1" Mode="NA" Type="OPEN" txt="NA-TO" TextType="guest" who="BANANNA"/>

代码语言:javascript
复制
        <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>
EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2018-01-04 03:05:31

创建新文件newcontent.txt。把你想要替换的内容。

代码语言:javascript
复制
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>

使用下面的命令根据您的需求替换内容

代码语言:javascript
复制
sed '5r newcontent.txt' example2.txt  | sed ‘5d'. 

example2.txt==>原始输入文件

newcontent.txt==>由需要替换的内容组成。

输出

代码语言:javascript
复制
<?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>
票数 0
EN

Unix & Linux用户

发布于 2018-01-03 22:08:04

代码语言:javascript
复制
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
票数 1
EN

Unix & Linux用户

发布于 2018-01-04 02:33:15

不要使用正则表达式解析或编辑XML。它不能可靠地工作,也不能可靠地工作--即使你确实破解了一些“有效”的东西,即使是输入XML文件中的微小变化或意外变化也会破坏任何仅限正则表达式的脚本。

相反,可以使用以下两种方法:

  • 一种具有XML解析库的编程语言,如perlpython (或许多其他语言)。
  • 一种命令行工具,如小星,它可用于大多数linux发行版和其他类似unix的系统。

如果您确实必须使用sedawk,那么使用xml2将XML数据转换成适合使用这些工具处理的面向行的格式,然后使用2xml将其转换回格式正确的XML。例如:

代码语言:javascript
复制
xml2 < yourxmlfile | your sed/awk script here | 2xml > newxmlfile
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/414647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档