批处理查找替换大量html文件办法
出自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
