Sed
用 sed 替換文本並保留部分原文
我正在嘗試轉換
<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 程式碼時,必須為元使用引用括號更為實際。