2011-05-11 7 views
0

で範囲内の特定の行を削除します。以下のようなブロックを考える:私はsedを使用したパターンに一致する一対の内側にブロックを削除しようとしているSED

      <span 
class="fxlbc-t1-x-x-172">M<span 
class="small-caps">A</span><span 
class="small-caps">R</span><span 
class="small-caps">S</span></span> 
           <span 
class="fxlbc-t1-x-x-248">R<span 
class="small-caps">A</span><span 
class="small-caps">I</span><span 
class="small-caps">S</span><span 
class="small-caps">O</span><span 
class="small-caps">N</span></span> 

私はブロックを削除する必要があります。

      <span 
class="fxlbc-t1-x-x-172">M<span 
class="small-caps">A</span><span 
class="small-caps">R</span><span 
class="small-caps">S</span></span> 

私はsedの中でそれをやろうとしています。 Nセレクタを使用しているときに私が打つ最初の問題は、奇数対偶数ラインの問題です。

sed -i 'N 
/.*<span \nclass="fxlbc-t1-x-x-172".*/,/.*class="fxlbc-t1-x-x-248".*/ { 
    /.*fxlbc-t1-x-x-172.*/d 
    }' test.html 

# Add an empty line 
sed -i '1i\ ' test.html 

sed -i 'N 
/.*<span \nclass="fxlbc-t1-x-x-172".*/,/.*class="fxlbc-t1-x-x-248".*/ { 
    /.*fxlbc-t1-x-x-172.*/d, 
    /.* 
    }' test.html 

私はそれを行うための簡単な方法がなければならないかなり確信している、そして私が適切にブロックの他の行を削​​除する方法とこだわっている(なし:私はこれを行うことによって、これを修正しましたfxlbc-t1-x-x-248span行を削除してください)。何か案が?

答えて

1

私は同僚で私の問題に答えを与えられました。

sed -i ':a ; $! { N ; ba } ; $s/\(<span\(\|\n\|\t\)\+class="fxlbc-t1-x-x-172">[^4]\+\)\(<span\(\|\n\|\t\)\+class="fxlbc-t1-x-x-248">\)/\3/g' test.html 

それはバッファ内の全ファイルを置き、その後、標準的な検索を行い、バッファリングされた文字列に置き換えます。私はそれが非常に醜いと思うが、それはトリックを行う。

関連する問題