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/等等。有标准的工具,它可以检查你的输入文件,因为它给你的是正确的结果。
