Sed

用 sed 替換文本並保留部分原文

  • July 10, 2021

我正在嘗試轉換

<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 程式碼時,必須為元使用引用括號更為實際。

引用自:https://unix.stackexchange.com/questions/20718