使用vi查找文件中指定内容并输出到文件
2006-03-30 17:49
232 查看
今天碰到这样一个需求,大概有100多个文件,需要从这些文件里面找到一些具有相同格式的代码,然后把他们统一输入到一个txt中去。拿到需求后,我的第一个想法就是使用vi,于是就尝试了一下,得到了一个不是很好的解决方案,如下:
:set nows
:map \1 gg:.,.write >> c:\temp.txt<CR>\2
:map \2 /^[ \t]*form <CR>ma/^[ \t]*with frame .*\.<CR>mb:'a,'bwrite >> c:temp.txt<CR>\2
:map \] :n<CR>\1
set nows
是用来关闭循环搜索的,vi默认会循环搜索一个文件,这样的话,我们就没有结束的条件了,所以要关闭它。
map \1 gg:.,.write >> c:\temp.txt<CR>\2
用来map一个命令\1,gg代表到第一行,:.,.表示复制第一行,write
>>
c:\temp.txt<CR>表示写到一个文件,\2是之后还会map的一个命令。注意到,因为需求的细节里面有要求把找到的代码和它们所
在的文件名做关联的要求,而所处理的文件第一行是包含文件名的注释,所以这样做可以达到要求。另外,输出时使用了绝对路径,这是因为需要处理多个文件,而
vi在多文件编辑模式下之只能读写绝对路径文件,这也是对的,因为如果编辑的文件处在不同目录,那么相对路径就是不定的了。
map \2 /^[ \t]*form <CR>ma/^[ \t]*with frame .*\.<CR>mb:'a,'bwrite >> c:temp.txt<CR>\2
用来map一个命令\2,/^[ \t]*form <CR>表示寻找一个文本模式,ma表示把找到的那一行标记为a,/^[ \t]*with frame .*\.<CR>表示寻找另一个文本模式,mb表示把找到的那一行标记为b,:'a,'b表示复制a和b之间的文本,write >> c:temp.txt<CR>表示输出到文件,\2表示循环调用\2直到找不到文本模式(这就是为什么要set nows的原因)。
map \] \1<CR>:n<CR>\]
用来map一个命令\],\1表示查找文本模式并输出到文件,:n<CR>表示切换到下一个文件,\]表示循环调用\]直到没有下一个文件存在。
做好这些setting和map之后,把需要处理的文件用一个vi打开,然后执行命令\],就得到想要的东西了。
:set nows
:map \1 gg:.,.write >> c:\temp.txt<CR>\2
:map \2 /^[ \t]*form <CR>ma/^[ \t]*with frame .*\.<CR>mb:'a,'bwrite >> c:temp.txt<CR>\2
:map \] :n<CR>\1
set nows
是用来关闭循环搜索的,vi默认会循环搜索一个文件,这样的话,我们就没有结束的条件了,所以要关闭它。
map \1 gg:.,.write >> c:\temp.txt<CR>\2
用来map一个命令\1,gg代表到第一行,:.,.表示复制第一行,write
>>
c:\temp.txt<CR>表示写到一个文件,\2是之后还会map的一个命令。注意到,因为需求的细节里面有要求把找到的代码和它们所
在的文件名做关联的要求,而所处理的文件第一行是包含文件名的注释,所以这样做可以达到要求。另外,输出时使用了绝对路径,这是因为需要处理多个文件,而
vi在多文件编辑模式下之只能读写绝对路径文件,这也是对的,因为如果编辑的文件处在不同目录,那么相对路径就是不定的了。
map \2 /^[ \t]*form <CR>ma/^[ \t]*with frame .*\.<CR>mb:'a,'bwrite >> c:temp.txt<CR>\2
用来map一个命令\2,/^[ \t]*form <CR>表示寻找一个文本模式,ma表示把找到的那一行标记为a,/^[ \t]*with frame .*\.<CR>表示寻找另一个文本模式,mb表示把找到的那一行标记为b,:'a,'b表示复制a和b之间的文本,write >> c:temp.txt<CR>表示输出到文件,\2表示循环调用\2直到找不到文本模式(这就是为什么要set nows的原因)。
map \] \1<CR>:n<CR>\]
用来map一个命令\],\1表示查找文本模式并输出到文件,:n<CR>表示切换到下一个文件,\]表示循环调用\]直到没有下一个文件存在。
做好这些setting和map之后,把需要处理的文件用一个vi打开,然后执行命令\],就得到想要的东西了。
相关文章推荐
- grep 在文件中查找指定的内容,并输出行号 及 获取指定行号的内容 分类: open()文件读写 ubuntu 2014-02-26 16:37 2156人阅读 评论(0) 收藏
- Linux下使用find查找文件内容,跳过所有目录名成和指定子目录的方法
- CFileFind类遍历查找文件夹下的所有文件,或者指定文件,并使用ofstream输出到制定文本
- grep 在文件中查找指定的内容,并输出行号 及 获取指定行号的内容
- 数组的创建/查找数组里面的内容/添加数组中元素/使用指定的字符串把数组链接起来/判断数组内是否有指定的数组元素/四种遍历进行输出数组中的元素有哪些
- 使用feof()判断文件结束时会多输出内容的原因
- 使用java的输出流写一个json格式的文件在指定目录下
- linux下查找文件及查找包含指定内容的文件常用命令
- (44)使用IO流向指定文件追加内容
- 使用cat命令和EOF标识输出多行文件 不指定
- 在一个exe文件中查找指定内容,找到则返回起始位置, 否则返回0
- 输出文件中不包含指定的多个排除词的行内容(双重遍历) 分类: python 小练习 2013-11-22 15:20 605人阅读 评论(0) 收藏
- 使用grep查找文件并输出
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- 使用sublime文件夹中全局查找文件内容
- Linux使用find查找最后修改时间超过三天的文件并移动到指定目录(附:find找出文件并清空)
- 关闭tomcat的stdout日志,并将System.out.println的内容输出到指定文件
- eclipse使用正则表达式查找文件内容
- grep指定文件类型和内容查找