2012-03-05 28 views
1

在現有標籤中插入屬性(字符串)。使用RegEX在現有XML標籤內插入元素(字符串)?

我需要將<pagenum><pagenum/>中發現的數字插入到id=屬性中,因此在此示例中。

我開始:

<pagenum page="normal" id="page">1<pagenum/>

,我需要替換它:

<pagenum page="normal" id="page1">1<pagenum/>

在那裏字符串可以是任何字母數字值。

這個正則表達式看起來像什麼? 這樣的事情?

/s/<pagenum page="normal" id="page">1<pagenum//>/<pagenum page="normal" id="page"{Value}>1\<pagenum/>

我真的對我的逆向引用太生疏......

+1

您的報價不均衡。 – tchrist 2012-03-05 02:54:36

+0

確實,我錯過了幾個引號......他們現在在... – Chyper64 2012-03-05 02:57:13

回答

2
  • 我自/至改變了正則表達式的分隔符!有一點點減少混亂)你用一個反斜槓而不是正斜槓
  • 逃脫字符

嘗試:

s!(<pagenum page="normal" id=")([a-z0-9_-]+)(">)([0-9]+)(<pagenum/>)!\1\2\4\3\4\5!i 

如:

echo '<pagenum page="normal" id="page">1<pagenum/>' | \ 
sed -r 's!(<pagenum page="normal" id=")([a-z0-9_-]+)(">)([0-9]+)(<pagenum/>)!\1\2\4\3\4\5!i' 

注 - 不結束標籤通常是</pagenum>而不是<pagenum/>

+0

是的。感謝您的表達。我確實需要更多的咖啡...... – Chyper64 2012-03-05 03:14:05

+0

它實際上應該閱讀'echo' 1'| \ sed -E's!()([0-9] +)()!\ 1 \ 2 \ 4 \ 3 \ 4 \ 5!g''表達式被擴展並且需要是全局的。我已經修復了我的惡作劇噩夢。再次感謝。 – Chyper64 2012-03-05 05:23:42

+0

啊,你在Mac上(BSD sed有'-E',GNU sed有'-r')。 – 2012-03-05 05:24:41