2012-03-05 13 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/>

I`m私のバックリファレンスにあまりにも錆び...

+1

あなたの見積もりはバランスが取れていません。 – tchrist

+0

確かに、私はいくつかの引用符を逃した...彼らは今そこにいる... – Chyper64

答えて

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

+0

実際には 'echo 'を読むべきです 1' | \ sed -E!()([0-9] +)()!\ 1 \ 2 \ 4 \ 3 \ 4 \ 5!g''式は拡張され、グローバルにする必要があります。私はスラッシュナイトメアを修正しました。再度、感謝します。 – Chyper64

+0

ああ、あなたはMac(BSD sedには '-E'、GNU sedには' -r'があります)にいます。 –

関連する問題