注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

kangzye的博客

加Q群25382780切磋java,加19360923群研究JavaScript

 
 
 

日志

 
 

如何将符合某个正则表达式的行全部收集到一个文件中(转强帖)  

2011-01-10 10:41:35|  分类: vim |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
转自:http://blogold.chinaunix.net/u/8681/showart_2106555.html

几种办法:

1.
:redir > ./all_matches.txt
:silent g/regex/
:redir END

现在all_matches.txt 中就是符合正则表达式的行了, 略有遗憾的是, 前面会有两个空行, 不过你很可能并不在意

2. 利用寄存器先收集, 再保存
:let @a=""
:g/regex/y A
:new
打开一个新缓冲区, 然后执行
"ap
把寄存器里的内容全部贴到该缓冲区中, 接下来就简单了, 保存到文件即可.

3. 如果你当前打开的缓冲区有对应的文件, 这其实是一个简单的命令行问题. grep regex file > match.txt 即可

不过办法3在几种情况可能并不方便:
A) 如果你当前的文件很大, 并且有一些内容尚未存盘, 你可能并不想因为这个而必需存盘一次
B) 还有可能你的当前缓冲区并不存在一个对应的文件. 为使用这个方法你还是得先保存一次
C) vim的正则表达式有一些特别的扩展, 可能是你见到的其它工具都不具备的, 比如variable length look behind assertion, 包括perl(但perl 6已经支持), 如果你碰巧需要用到这部分的正则表达式特性, 其它的工具提供不了给你(即使你用grep -P).  不过这种情况下, 你应该自有办法, 不需要看我在这唠叨.


或许你跟我一样, 尝试过 :g/regex/w match.txt
但它不工作, 它并不是把所有符合条件的行收集到文件中, 而是对每一个符合条件的行, 都执行命令
w match.txt
结果就是有N次, 执行这么同一个存盘的动作. 而且, 保存的是缓冲区中全部的行. 非你所愿
  评论这张
 
阅读(416)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017