2012-01-09 14 views
0

<p> </ p>というラベルが<TXT_accesp> </TXT_accesp>のすべてであり、それらを削除する次のコードがあります。このコードは、正しく動作します:sedの行範囲の正規表現に参加する

find /home -type f -name "*.html" -exec \ 
    sed -i '/\<TXT_accesp\>/,/\<\/TXT_accesp\>/[email protected]</\?p>@@g' {} \; 

問題は、ラベルを追加する必要があることです。今度は<p> </ p>のすべてを<TXT_accesp> </TXT_accesp>または<TXT_acceng> </TXT_acceng>の範囲内に削除する必要がありますが、正規表現に参加できません。またはエラーが発生します(間違っているかのようにコマンドが存在しません)。

find /home -type f -name "*.html" -exec \ 
    sed -i '/\<TXT_accesp\>/,/\<\/TXT_accesp\>\||\<TXT_acceng\>/,/\<\/TXT_acceng\>/[email protected]</\?p>‌​@@g' {} \; 

答えて

3

sed線の範囲の間の交互(ORまたは||)をサポートしていません。一部のバージョンでは(読みやすくするため)-eオプションでsedに2つのコマンドを正規表現で交代で拡張正規表現をサポートしていますが、あなたがここで必要なのである:あなたが1行にそれを折りたたむことができ

find /home -type f -name "*.html" -exec \ 
    sed -i -e '/\<TXT_accesp\>/,/\<\/TXT_accesp\>/[email protected]</\?p>@@g' \ 
      -e '/\<TXT_acceng\>/,/\<\/TXT_acceng\>/[email protected]</\?p>@@g' \ 
     {} \; 

。あなたはそうしてはいけません。

+0

ありがとうございました。 次のように最後に、コードがされています: '見つける/ホーム-type fが-name "* .htmlの" -exec \ のsed -i -e「/ /、/ <\/TXT_accesp>/sの@ @@ g '\ -e'/// <\/TXT_acceng>/s @ @@ g '\ {} \; ' –

関連する問題