2012-01-09 43 views
0

我有以下代碼,可以在標籤<TXT_accesp> </TXT_accesp>中找到所有<p> </ p>並刪除它們。此代碼確實如此,它工作正常:在sed中加入行範圍的正則表達式

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

問題是我需要添加更多標籤。現在,您必須刪除<TXT_accesp> </TXT_accesp><TXT_acceng> </TXT_acceng>內的所有<p> </ p>,但我無法加入正則表達式OR,但出現錯誤(該命令不存在,就好像做得不好)。

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

回答

3

sed不行的範圍之間交替支持(OR或||)。有些版本支持擴展的正則表達式與正則表達式交替,但你所需要的就是兩個命令來sed用(爲便於閱讀)的-e選項:

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

非常感謝您的幫助。 最後,代碼一直如下: '找到/家用型的F -name 「*。html的」 -exec \ SED -i -e「/ /,/ <\/TXT_accesp> /秒@ @@ g'\ -e'/ /,/ <\/TXT_acceng>/s @ @@ g'\ {} \;' – 2012-01-09 20:23:55