Mik*_*ike 22 xml sed regular-expression
我正在尝试转换
<id>1</id>
<Name>ENTERPRISE RESOURCE PLANNING</Name>
Run Code Online (Sandbox Code Playgroud)
到:
<column name="id">1</column>
<column name="Name">ENTERPRISE RESOURCE PLANNING</column>
Run Code Online (Sandbox Code Playgroud)
我假设这项工作的最佳工具是sed,但是我无法弄清楚如何将原始文本的一部分保留在替换部分中。
如果我做:
$ sed -i 's/<.*>.*<.*>/<column name="\\1">\\2<\/column>/g' filename.xml
Run Code Online (Sandbox Code Playgroud)
输出是:
<column name="\1">\2</column>
<column name="\1">\2</column>
Run Code Online (Sandbox Code Playgroud)
或者从 inside 做类似的事情vi,它输出:
<column name=""></column>
<column name=""></column>
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点,\1并被\2替换回它们的原始值?
max*_*zig 24
您可以使用组,例如:
$ sed -i 's/<\(.*\)>\(.*\)<.*>/<column name="\1">\2<\/column>/g' filename.xml
Run Code Online (Sandbox Code Playgroud)
可能关于 RE 最令人困惑的部分是有各种不同的句法风格。
例如 sed 和 vim 使用基本的正则表达式,您必须在其中引用()才能获得它们的元含义。
对于扩展的正则表达式(例如 awk、egrep 和 less),您必须引用()以获得字面含义。其他元字符也有类似的差异。
BRE()语义背后的基本原理是,当您的大部分输入是 C 代码时,为了元使用而必须引用括号更为实际。