1

私は次のようなタグを持っています:

<div style="position:absolute;opacity:0.5" class="header">Home</div>

(スタイルまたは他の属性がある場合とない場合があります)そしてsedを使用して、スパンのIDがdivのクラスであるスパンに変換する必要があります。

<span style="position:absolute;opacity:0.5" id="header">Home</span>

私はPHPでこれを行う方法を知っていますが、残念ながら私のLinuxには欠けています:)。
適格なDIVを見つけるための正規表現は次のようなものです。

#<div .* id=(.*)>.*</div>#

しかし、主にdivタグ名とidの間にコンテンツを保持する必要があるため、置換パーツの記述方法がわかりません。午前4時45分なので、それも関係があるかもしれません:p。

これについて助けていただければ幸いです、ありがとうございます。

4

2 に答える 2

2

sed を使用し、より具体的な処理が必要な場合:

sed '/<div/{s/<div /<span /;s/ class *=/ id =/;s!</div!</span!}' input

それでも、これは開始タグと終了タグが同じ行にあり、その行に単一の div タグがあることを前提としています。また、class 属性がその行で唯一のものであると想定します。

より厳密なコマンドは次のとおりです。

sed 's!<div\([^>]*\) class *= *\([^>]*\)>\([^<]*\)</div>!<span\1 id=\2>\3</span>!g' input
于 2012-12-28T09:54:25.110 に答える
0
sed 's/div/span/;s/id/class/' foo.html

出力します

<span style="position:absolute;opacity:0.5" class="header">Home</div>

ドキュメントはどこfoo.htmlにありますか

注意を払う

divこれはとの最初の発生のみを置き換えidます。すべてを置換したい場合は、次のように、各置換パターンの最後に「g」文字を追加する必要がありますs/div/span/g

そして、それほど重要ではありませんが、ドキュメントを上書きしたい場合 (つまり、出現を「その場で」置き換えたい場合) は、次の方法で処理する必要があります。sed -ie 's/div/span/;s/id/class/' foo.html

最後に: Basile Starynkevitchがコメントで言っているように、おそらく sed は最良の選択ではありません

于 2012-12-28T09:48:49.363 に答える