下载了ruby的Standard Library Documentation, 发现其离线版本的home链接居然是’/’, 这在使用中会指向file:///, 所以还是替换一下吧:
把
1
<a href= '/' target= '_top' > Home</a>
替换成
1
<a href= 'index' target= '_top' > Home</a>
用这个命令:
1
$ sed -i -e "s/'\/' target/'\/index.html' target/g" *.html
如果想替换前做个备份:
1
$ sed -i.bak -e "s/'\/' target/'\/index.html' target/g" *.html
如果想把当前目录及子目录下的文件都替换掉, 那可以这样写:
1
$ find . -type f | xargs sed -i.bak -e "s/'\/' target/'\/index.html' target/g"
当然这只是个例子, 因为子目录下的html文件中的home链接如果也换成了index.html, 那还是不能链接到父目录中的index.html.
因为换成了octopress, 所以留言也托管到disqus了, 导入留言后, 发现blog下方的留言不能显示, 查看源代码发现链接最后没有斜线 “/”, 我在disqus里面换链接的时候, 设置成都以斜线结尾.
链接最后没有斜线 1
2
3
4
5
6
7
8
9
10
11
12
< script type = "text/javascript" >
var disqus_shortname = 'neten' ;
// var disqus_developer = 1;
var disqus_identifier = 'http://blog.neten.de/posts/345/' ;
var disqus_url = 'http://blog.neten.de/posts/345/' ;
var disqus_script = 'embed.js' ;
( function () {
var dsq = document . createElement ( 'script' ); dsq . type = 'text/javascript' ; dsq . async = true ;
dsq . src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script ;
( document . getElementsByTagName ( 'head' )[ 0 ] || document . getElementsByTagName ( 'body' )[ 0 ]). appendChild ( dsq );
}());
< /script>
打开source/_posts/2012-03-25-345.textile
发现345后面没有斜线, 如果在vi里面可以这样替换掉:
1
:g/\(permalink:\s\/posts\/\d\+\)$/s//\1\//g
但面对 source/_posts/下面二百多篇文章, 一个一个加斜线显然不现实, 那只好请出强大的sed
1
$ sed -i -e 's/permalink:\(.*$\)/permalink:\1\//g' *.textile
最后再写一个网上 看到的处理电话号码的scripts作为结束吧.
一个文本文件phone.txt里面包含内容如下:
1
2
3
4
5
6
5555551212
5555551213
5555551214
6665551215
6665551216
7775551217
前三位是区号, 要用()包起来, 使用”&”来匹配前面查找的内容:
1
$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
参数不含”-i”, 所以不会改动文件, 只会显示结果如下:
1
2
3
4
5
6
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
(777)5551217
如果想先把区位用括号包起来, 然后在这之后的第三位想再加入一个”-“, 这时可以多个命令一起用:
1
$ sed -e 'command1' -e 'command2' ... -e 'commandN' files
例子:
1
$ sed -e 's/^[[:digit:]]\{3\}/(&)/g' -e 's/)[[:digit:]]\{3\}/&-/g' phone.txt
结果如下:
1
2
3
4
5
6
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
如果想表达得更清楚, 可以这样玩:
1
$ cat phone.txt | sed 's/^(\(.*\))\(.*\)-\(.*$\)/Area code: \1 Second: \2 Third: \3/'
结果如下:
1
2
3
4
5
6
Area code: 555 Second: 555 Third: 1212
Area code: 555 Second: 555 Third: 1213
Area code: 555 Second: 555 Third: 1214
Area code: 666 Second: 555 Third: 1215
Area code: 666 Second: 555 Third: 1216
Area code: 777 Second: 555 Third: 1217