sed -r 's#<java.lang.String value="([^"]*)"/>#<animal>\1</animal>#g' test.txt
而且你不应该用正则表达式做XML
的转换...
关于它如何工作的编辑
默认情况下,sed
使用 "基本正则表达式",其中许多特殊字符必须以\
为前缀。-r
标志切换到 "扩展正则表达式",其中的语法不那么繁琐。参见OpenGroup详情请见下文。
默认情况下,sed
按原样打印输出,除非命令修改它。替换命令就像s#search_regexp#replacement#flags
。分隔符可以是任何东西,如/
、#
或,
。我选择#
,这样它就不会与XML
中的\
字符相冲突。
然后,我们匹配像<java.lang.String value="anything_except_quotes"/>
这样的东西。我们想要重用的部分有括号,它被称为匹配组。在替换中,我们用\1
来指代我们在匹配组里面捕获的东西。
g
标志使sed
替换所有搜索模式的出现,而不仅仅是第一个出现。
zmo:
请尽量使用正确的工具来完成正确的任务。对XML文档的转换应使用XSL转换,而不是sed/grep/等等。有标准的工具,它可以检查你的输入文件,因为它给你的是正确的结果。