変換しようとしています
<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など)では、文字どおりの意味を取得するには()
を引用符で囲む必要があります。他のメタキャラクターについても同様の違いがあります。
BRE ()
セマンティクスの背後にある理論的根拠は、入力のほとんどがCコードである場合は、メタ使用のために括弧を引用する必要があることです。