【发布时间】:2014-05-07 10:21:59
【问题描述】:
我有一个名为 test.txt 的文件,内容如下
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<test time="60" id="01">
<java.lang.String value="cat"/><java.lang.String value="dog"/>
<java.lang.String value="mouse"/>
<java.lang.String value="cow"/>
</test>
我想做的是,我想编辑文件,以便当我得到类似 <java.lang.String value="something"/> 的内容时,我会将那部分更改为 <animal>something</animal>
因此,对于前面的示例,在使用 sed/awk/grep 命令应用脚本后,文件内容将更改为或创建一个新文件,如下所示:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<test time="60" id="01">
<animal>cat</animal><animal>dog</animal>
<animal>mouse</animal>
<animal>cow</animal>
</test>
我尝试使用以下命令提取该特定部分:
$less test.txt | grep -Po 'java.lang.String value="\K[^"]*' | awk -F: '{print "<animal>" $1 "</animal>"}'
输出给了我更改的部分,但我希望这个更改的部分与文件的其余部分保持不变:
<animal>cat</animal>
<animal>dog</animal>
<animal>mouse</animal>
<animal>cow</animal>
我是脚本新手,我不知道如何将完整的输出写入文件。
【问题讨论】:
-
请尝试使用正确的工具来完成正确的任务。转换 XML 文档应使用 XSL 转换完成,而不是 sed/grep/etc.. 有标准的工具,它可以检查您的输入文件,因为它会为您提供正确的结果。