`

使用vi查找文件中指定内容并输出到文件

阅读更多
今天碰到这样一个需求,大概有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打开,然后执行命令\],就得到想要的东西了。
分享到:
评论

相关推荐

    vi技巧大全命令大全

    command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入 :r!command:将命令command的输出结果放到当前行 寄存器操作 "?nyy:将当前行及其下n行...

    入门学习Linux常用必会60个命令实例详解doc/txt

    此外,可以直接检查 /var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的设备代号。 (3)查找挂接点 在决定将设备挂接之前,先要查看一下计算机是不是有个/mnt的空目录,该目录就是专门用来...

    linuxshell

    实验任务一: 编写一个Shell过程完成如下功能(必须在脚本中使用函数): 1、合并两个$1、$2文件为$3,并显示。 2、如果缺少$3,那么先报告缺少$3,然后将合并后的内容输出到mydoc.txt。如果有$3,就合并到...

    linux学习记录

    Grep 收索一个没有打开的文件中的字符(查找给定字符串所以在的位置或行) vi 文本编辑器(相当于win notepad) 用vi 打开某文件 # vi 文件目录/文件名 dd 删除一行记录 a 添加记录 esc 退出 wq 保存退出 !q 不保存...

    Linux指令一周通 (技术图书大系).azw3

    1.7 cat指令:连接并输出文件内容 1.8 chattr指令:改变文件的属性 1.9 chgrp 指令:改变文件或者目录所属的用户组 1.10 chmod指令:改变文件或者目录的权限 1.11 chown指令:改变文件的拥有者或用户组 1.12 cksum...

    Solaris操作系统常用命令

    19、find 搜索指定目录下要找的文件,找到后给出文件的路径 20、vi 文本文件编辑工具 21、echo 是向标准输出设备(一般指屏幕)重显、回送字符串 22、ping 测试网络通断情况 23、ftp 本地工作站与远端工作站之间...

    LINUX安装与配置简明手册

    5.2.20 把命令结果输出到文本文件中 61 5.2.21 建立别名 61 5.2.22 使用find命令确定文件存放位置 61 5.2.23 通过搜索locate数据库来查找文件 62 5.2.24 在path语句说明的路径中查找 文件 62 5.2.25 在path语句中...

    linux安装与配置简明手册

    5.2.20 把命令结果输出到文本文件中 61 5.2.21 建立别名 61 5.2.22 使用find命令确定文件存放位置 61 5.2.23 通过搜索locate数据库来查找文件 62 5.2.24 在path语句说明的路径中查找 文件 62 5.2.25 在path...

    详解linux系统输入输出管理和vim的常用功能

    输入重定向是指把文件导入到命令中,而输出重定向则是把原本要输出到屏幕的数据信息写入到指定文件中。 2.管理输入输出的符号 ##输出重定向 &gt; ##重定向正确输  2&gt; ##重定向错误输出  &&gt; ##重定向所有输出 注意...

    Shell脚本专家指南

    主要内容包括如何使小到中型的系统管理任务自动化,分析系统数据并编辑配置文件,使用bash和ksh等编写IAnux、Unix和OSX应用程序的脚本文件等。 《Shell脚本专家指南》面向中高级的shell程序员,以及需要解决日常问题...

    C语言入门经典(第4版)--源代码及课后练习答案

    3.1.5 在if语句中使用代码块 86 3.1.6 嵌套的if语句 87 3.1.7 更多的关系运算符 90 3.1.8 逻辑运算符 93 3.1.9 条件运算符 97 3.1.10 运算符的优先级 99 3.2 多项选择问题 103 3.2.1 给多项选择使用else-if...

    2009 达内Unix学习笔记

    输出重定向,意思就是说,将原来屏幕输出变为文件输出,即将内容输到文件中。 输入重定向。 本来命令是通过键盘得到输入的,但是用小于号,就能够使命令从文件中得到输入。 \ 表示未写完,回车换行再继续。 * ...

    Linux操作系统基础教程

    在这一讲中,我们主要是了解一下 Linux 的概况,以及对 Linux 有一个初步的感性认识。 一.什么是Linux? Linux 是一个以 Intel 系列 CPU(CYRIX,AMD 的 CPU也可以)为硬件平台,完全免费的 UNIX 兼容系统,完全...

    flash_cs5_help.pdf

    目录 第 1 章: Adobe Flash Professional CS5 中的新增功能 新增功能..... . . . . . . ....Flash 工作流程和工作区.......针对 SWF 输出优化 FLA 文件... . . . . . . . 390 为移动设备创建内容的提示 ... . . . . . .

    Linux常用的命令。。。。。

    sed 's/cat/dog/' cats 将cats 文件中cat 替换成dog cd – 可以使回到上次的目录 eg./tmp/jack/rose/love 先在love 目录下,后回到jack目录下cd – 后回到love 目录下 /etc/passwd /etc/shadow /etc/group /etc/...

    学生成绩管理系统课程.doc

    录入各个学生成绩时,通过循环语句将学生名称与成绩得分输入到结构体中,然后 通过循环语句算出平均分、成绩方差并写入文本文件中,并存入磁盘。 3. 查询成绩排名时,直接通过已经存在的文本文件进行读出到结构体中...

    新版Linux Shell编程实训(全)20170518.docx

    任务10.2 Shell案例:查找最大文件 172 练习(每题50分,共计100分) 174 项目十一 Shell文本处理命令 175 [学习目标] 175 任务11.1 学习和使用grep 176 任务11.2 学习和使用sed 179 任务11.3 学习和使用cut 183 ...

    浅析VB程序数据库学生管理系统.doc

    查找和检索仅满足指定条件来自一个或多个表中的数据,查询也可以一次更新或删除 多个记录,并对数据执行预定义或自定义计算。 创建窗体更方便、直接和安全地查看、输入和更改数据,还可以利用窗体设计出友好 的界面...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    史上最全韩顺平毕业班视频------这里只有10月份,8,9,11月份在另外一个文件下。 ... ...8-11 2.html运行原理② html文件基本结构 html元素和属性 8-11 3....8-11 4....10-30 4 vi编辑器使用 linux目录讲解 ...

    史上最全传智播客PHP就业班视频课,8月份视频

    史上最全韩顺平毕业班视频------这里只有8月份,9,10,11月份在另外一个文件下。 ... ...8-11 2.html运行原理② html文件基本结构 html元素和属性 8-11 3....8-11 4....10-30 4 vi编辑器使用 linux目录讲解 ...

Global site tag (gtag.js) - Google Analytics