linux 下如何批理替换文件内容。

wzwsj1986 2010-06-16 06:58:30
我知道用sed 或者 find 加perl能实现批量替换,如:find -name '*.html' |xargs perl -pi -e 's|<script src="a.js([^>]*)></script>||g' (注:好像只能匹配替换单行)
但这样只能替换单行文本内容,如果我想替换
<div id="123">
... 中间回车换行了
...
...
<div>


求解?


这里关键是换行了。

-------------------------------------------------------
sed -i ‘s/原来内容/新内容/g' 文件地址
这样这个文件从头到尾,全部内容就更换了。

如果替换的内容有空格之类的,加上双引号""屏蔽掉,或者用转义字符\

试过了不成功。
...全文
311 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
stream1990 2010-10-03
  • 打赏
  • 举报
回复
LZ被挂黑链了?
liucy1983 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wzwsj1986 的回复:]

试过了,还是不行。

或者写个shell脚本,批理替换文件中某一内容(注意:不是单行)

再次拜谢。
[/Quote]

你是怎么试的,把写的命令和脚本贴上来
steptodream 2010-06-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wzwsj1986 的回复:]

试过了,还是不行。

或者写个shell脚本,批理替换文件中某一内容(注意:不是单行)

再次拜谢。
[/Quote]
我说的那个你是怎么测试的 我测试了好用啊

AAAAAAAAAAA
<div id="123">
aa
dsfsadf
sdfdsfsdfsdf
</div>
BBBBBBBBBBB

替换之后就成下面这样了
AAAAAAAAAAA
CONTENT1
CONTENT2
BBBBBBBBBBB
steptodream 2010-06-18
  • 打赏
  • 举报
回复
下面是我替换的结果
你的两个<div></div>
分别都被替换成了
CONTENT1
CONTENT2

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

CONTENT1
CONTENT2

CONTENT1
CONTENT2<!-- /dcmp-mood -->


</html>

wzwsj1986 2010-06-18
  • 打赏
  • 举报
回复

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<div style="position: absolute; top: -878px;left: -967px;">
<a href="http://www.sfw123.net">蜀门私服</a>
<a href="http://www.jpfbw.com">网页游戏私服</a>
<a href="http://www.jpfbw.com">网页游戏大全</a>
<a href="http://www.138775.com">武林外传私服</a>
<a href="http://138775.com">神泣私服</a>
<a href="http://www.g800.net">蜀门sf</a>
<a href="http://www.180k.net">诛仙私服</a>
<a href="http://www.vip02.com">在线电影</a>
<a href="http://vip02.com">武林外传私服</a>
<a href="http://bw.180k.net">霸王大陆私服</a>
<a href="http://www.aion122.cn">黛安芬</a>
<a href="http://www.aion122.cn">爱慕</a>
<a href="http://www.aion122.cn">婷美</a>
<a href="http://www.aion122.cn">曼妮芬</a>
<a href="http://www.aion122.cn">华歌尔</a>
</div>

<div class="dcmp-mood">
<strong>表情:</strong>
<ul>
<li><input type="radio" name="face" value="1" checked="1" /><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-1.gif" /></li>
<li><input type="radio" name="face" value="2"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-2.gif" /></li>
<li><input type="radio" name="face" value="3"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-3.gif" /></li>
<li><input type="radio" name="face" value="4"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-4.gif" /></li>
<li><input type="radio" name="face" value="5"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-5.gif" /></li>
<li><input type="radio" name="face" value="6"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-6.gif" /></li>
<li><input type="radio" name="face" value="7"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-7.gif" /></li>
<li><input type="radio" name="face" value="8"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-8.gif" /></li>
<li><input type="radio" name="face" value="9"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-9.gif" /></li>
<li><input type="radio" name="face" value="10"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-10.gif" /></li>
<li><input type="radio" name="face" value="11"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-11.gif" /></li>
<li><input type="radio" name="face" value="12"/><img src="{dede:global.cfg_templets_skin/}/images/mood/ico-mood-12.gif" /></li>
</ul>
</div><!-- /dcmp-mood -->


</html>





上面文件为a.html

其中<div style="position: absolute; top: -878px;left: -967px;">...</div>需要替换


执行 sed -e ":begin; /<div.*>/ { /<\/div>/! { $! { N; b begin };}; s/<div.*>.*<\/div>/CONTENT1\nCONTENT2/; };" a.html

无法替换,系统为
CentOS release 5.5 (Final)
Kernel \r on an \m

用sed -i 文件有修改,但还是替换不了。










yuchujian 2010-06-17
  • 打赏
  • 举报
回复
嗨,不懂perl,顶一个吧
STONEWP 2010-06-17
  • 打赏
  • 举报
回复
我知道win 下用ue

linux 也有ue版本 不知有这个功能否


你不妨安装一个试试。
wzwsj1986 2010-06-17
  • 打赏
  • 举报
回复
试过了,还是不行。

或者写个shell脚本,批理替换文件中某一内容(注意:不是单行)

再次拜谢。

liucy1983 2010-06-17
  • 打赏
  • 举报
回复
你还是先仔细看一下那篇教程吧
masmaster 2010-06-17
  • 打赏
  • 举报
回复
把下面的什么替换成空行呀
<div id="123">
aa
</div>
liucy1983 2010-06-17
  • 打赏
  • 举报
回复
http://www.fwolf.com/blog/post/346

看的我头晕脑涨,跟楼上的一样,只不过这个网站讲了一下学习方法
steptodream 2010-06-17
  • 打赏
  • 举报
回复
楼主是要替换从<div>开始到</div>结束的吗
比如替换成
CONTENT1
CONTENT2
网上了学了下 有点复杂 你试试 然后再改造改造

sed -e ":begin; /<div.*>/ { /<\/div>/! { $! { N; b begin };}; s/<div.*>.*<\/div>/CONTENT1\nCONTENT2/; };" file
yzx714 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wzwsj1986 的回复:]

现在关键是perl这个多行替换怎么写,
麻烦写个例子行不。

如:
<div id="123">
aa
</div>

替换为空或者aaa等。

perl sed 都试过了,总是不成功。
[/Quote]加个m选项,http://www.cnblogs.com/morebetter/archive/2007/05/10/741787.html
wzwsj1986 2010-06-16
  • 打赏
  • 举报
回复
现在关键是perl这个多行替换怎么写,
麻烦写个例子行不。

如:
<div id="123">
aa
</div>

替换为空或者aaa等。

perl sed 都试过了,总是不成功。
yzx714 2010-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wzwsj1986 的回复:]

yzx714

感谢呀,我在线等待中...
[/Quote]假如是我,我肯定会写一个perl脚本,在这个脚本中对命令行参数传入的文件进行多行替换。
xiaocai0001 2010-06-16
  • 打赏
  • 举报
回复
sed支持multiple line mode
wzwsj1986 2010-06-16
  • 打赏
  • 举报
回复
yzx714

感谢呀,我在线等待中...
yzx714 2010-06-16
  • 打赏
  • 举报
回复
楼主抱歉实在好久没用perl的命令行了,让我去翻下文档再来回帖~

19,614

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧