本文来自依云's Blog,转载请注明。
我在编辑一些HTML文件。写得觉得差不多了,浏览器里看过还不满足,竟然想到去W3C验证一下。这一验证,差点出大事了!
因为需要使用程序来处理,所以这些HTML文档全部都是合格的XML文件,所以我给它们加上了<?xml version="1.0" encoding="UTF-8"?>
。但W3C却告诉我HTML里不能写这个。好吧,我把它们都删掉:
sed -i '/<\?/d' *.html
我想的是,凡是有<?
的行全部删掉。命令执行完后忽然有点不好的感觉,于是ll
一下,结果看到了一堆长度为0的HTML文件!我愣了一下,随即欲哭无泪!虽然这些文件在SVN里,但是自我这次开始编辑后我就没提交过!sed也是危险的命令啊!
我只想到火狐里还保留着改动最多的一个页面,赶紧先把它的源代码复制出来。直接“查看源代码”还不管用,因为本地文件是没有缓存的,查看时火狐会去磁盘上找文件。于是打开Firebug,在<html>元素上点右键,复制HTML,然后手工整理。剩下的文件没办法,只有SVN和Vim的*~备份文件了,555……
好吧,我认命。于是我在Vim里打开另一个文件,想趁着还记得改了些什么赶紧重做一遍,却意外地发现打开的文件显示着我sed之前的内容。来不及多想,我赶紧:w保存了,然后想了下,才恍然大悟——
我现在习惯于一直开着一个GVim实例,而又经常只是挂起或者休眠,几天才shutdown一次,所以经常会有100多个buffer。虽然我通常是把hidden选项关闭的,但有时候为方便切换buffer,会去se hidden
一下,然后一直忘记再设置回来。这次,不记得什么时候设置了hidden选项,于是,那些被我关闭的buffer都还在内存里!终于知道了hidden在文件已保存的情况下有什么重要作用了!怀着对Vim的感激,我在buffer找到了所有被sed误删的文本,泪流满面~~
2011年3月17日更新:
现在才知道,sed 原来是支持备份的,只要告诉它备份文件的后缀就行了,像这样-i~
。
另外,Perl 也支持类似的操作,但用的是PCRE,功能强大许多我也熟悉许多。用法是
perl -pin -e 'print /regex/' #相当于 sed -i '/regex/d' perl -pi -e 's/regex/replacement/g' #相当于 sed -i 's/regex/replacement/g'
Sep 16, 2010 10:14:15 AM
T_T 用了这么久 vim 还不知道 hidden 是什么的人路过……
Sep 16, 2010 09:52:14 PM
vim 的选项太多了,有若干不知道的很正常。其实之前我也没怎么注意这个选项的。
Sep 20, 2010 01:51:05 AM
杯具的sed阿,呵呵。
Sep 23, 2010 06:13:10 PM
Hi! 我是 Jacky Liu,谢谢你给我发的 Vim 7.3 编译版!
你的博客挺不错的,我也想在这里开一个。
Sep 23, 2010 11:28:14 PM
不用谢,开一个吧,把自己折腾Linux和Vim的经历都写下来 :-)
Sep 24, 2010 05:48:04 AM
真的开了,呵呵 :)
我看见你的主页上有链接这一栏,请问怎样往里加链接啊,没找见。我想把你的主页地址加进去 :)
Sep 24, 2010 08:49:41 AM
管理->友情链接 这里 http://bluegene8210.is-programmer.com/admin/links
Sep 24, 2010 06:53:44 PM
搞定了,以后多来我这里踩踩 :)
Sep 09, 2013 03:33:06 AM
原来还有这选项。