2012-01-09 56 views
0

我正在编写bash脚本,它的作用是在目录中查找所有.html扩展名文件,并删除<TXT_accesp> </TXT_accesp>标记中的所有标记<p> </ p>用bash打开并保存更改

到目前为止,我有以下的代码和样本输出(通过控制台)正常工作:

for i in $(find /home -name *.html); do sed -e '/<TXT_accesp>/,/<\/TXT_accesp>/ s/<p>\(.*\)<\/p>$/\1/g' $i; done 

的问题是,改变需要被保存在被修改的每个.html文件,因为正如我以前说过,当我运行进行更改,但只能通过控制台但未保存在文件中。

从已经非常感谢任何能够帮助我的人。

回答

1

你不需要for循环,你可以使用-exec选项的find命令来做替换。

find /home -type f -name "*.html" -exec sed -i '/<TXT_accesp>/,/<\/TXT_accesp>/ s/<p>\(.*\)<\/p>$/\1/g' {} \; 
2

检查sed手册页。有一个-i标志,这意味着编辑“in-place”(它修改文件而不是将输出发送到终端)。