批处理查找替换大量html文件办法

728x15 ad here

出自Guoshuang Wiki

跳转到: 导航, 搜索

任务很简单,把6000多个htm文件加上 adsesne 和样式表。最后的命令行如下:

find . -name "*.html" -exec sed -i "s/<body>/<link rel=\"stylesheet\" type=\"text\/css\" href=\"style.css\" \/>\n<body>\n<div id=\"ad1\" style=\"float:left;\">\n<script type=\"text\/javascript\"><\!--\ngoogle_ad_client = \"pub-3332674173523723\";\n\/* 160x600, created 3\/4\/08 *\/\ngoogle_ad_slot = \"8263104448\";\ngoogle_ad_width = 160;\ngoogle_ad_height = 600;\n\/\/-->\n<\/script>\n<script type=\"text\/javascript\"\nsrc=\"http:\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js\">\n<\/script>\n<\/div>\n/g" {} \;

解释如下:

一开始尝试 rpl 命令,很简单,但不能处理 ! 号。在 shell 中 ! 号用别的用处,需要 \!,但很遗憾 rpl 输出的也是 \!。只好用 sed 搞定。


sed "s/abc/def/g" 123.txt

把 123.txt 文件中的 abc 换成 def,输出到终端。s 表示搜索,/g表示全局。

sed -i 123.txt

表示就地修改。123.txt

sed -iback 123.txt

表示修改后的文件另存为 123.txtback

注意:

sed 的正则比较严格: " \ / ! 都需要分别用 \" \/ \\ \! 转义。

\n 表示换行

find .

在当前目录中找

find . -name "*.html"

找那些后缀为 html 的文件。

find . -name "*.html" -exec ABC {} \;

对找到的每个文件执行 ABC 操作。

by guoshuang 2008-03-14

个人工具
125x125 ad here
Advertisement
120x600 ad here