我有以下代码,可以在标签<p> </ p>
中找到所有<TXT_accesp> </TXT_accesp>
并删除它们。这段代码可以正常工作:
find /home -type f -name "*.html" -exec \
sed -i '/\<TXT_accesp\>/,/\<\/TXT_accesp\>/s@</\?p>@@g' {} \;
问题是我需要添加更多标签。现在您必须删除<p> </ p>
内或<TXT_accesp> </TXT_accesp>
内的所有<TXT_acceng> </TXT_acceng>
但我无法加入正则表达式OR,我收到错误(该命令不存在,好像很糟糕完成)。
find /home -type f -name "*.html" -exec \
sed -i '/\<TXT_accesp\>/,/\<\/TXT_accesp\>\||\<TXT_acceng\>/,/\<\/TXT_acceng\>/s@</\?p>@@g' {} \;
答案 0 :(得分:3)
sed
不支持行范围之间的交替(OR或||
)。有些版本支持在正则表达式中使用交替的扩展正则表达式,但是你需要的是sed
的两个命令-e
选项(为了便于阅读):
find /home -type f -name "*.html" -exec \
sed -i -e '/\<TXT_accesp\>/,/\<\/TXT_accesp\>/s@</\?p>@@g' \
-e '/\<TXT_acceng\>/,/\<\/TXT_acceng\>/s@</\?p>@@g' \
{} \;
你可以将它折叠到一行;你不应该这样做。