我正在尝试转换
<id>1</id>
<Name>ENTERPRISE RESOURCE PLANNING</Name>
至:
<column name="id">1</column>
<column name="Name">ENTERPRISE RESOURCE PLANNING</column>
我认为最好的工具是sed
,但是我不知道如何将部分原始文本保留在替换部分中。
如果我做:
$ sed -i 's/<.*>.*<.*>/<column name="\\1">\\2<\/column>/g' filename.xml
输出为:
<column name="\1">\2</column>
<column name="\1">\2</column>
或从内部执行类似操作vi
,它输出:
<column name=""></column>
<column name=""></column>
我如何才能做到\1
并被\2
替换回其原始值?
您可以使用组,例如:
$ sed -i 's/<\(.*\)>\(.*\)<.*>/<column name="\1">\2<\/column>/g' filename.xml
关于RE的最令人困惑的部分可能是存在各种语法风格。
例如sed和vim使用基本的正则表达式,您必须在其中引用()
它们的元含义。
使用扩展的正则表达式(例如awk,egrep和less),必须引用()
以获取字面意思。其他元字符也有类似的区别。
BRE()
语义的基本原理是,当您的大部分输入是C代码时,为元用途使用引号会更实际。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句