标题党了,其实是论VIM的使用

做生物信息分析最合适的还是Linux操作系统,所以生信宝典在最开始就推出了Linux学习系列,由浅入深的讲述了Linux学习中的关键点。

主要文章列举如下:

  • Linux学习-文件和目录
  • Linux学习-文件操作
  • Linux文件内容操作
  • Linux学习-环境变量和可执行属性
  • Linux学习 - 管道、标准输入输出
  • Linux学习 - 命令运行监测和软件安装
  • Linux学习-常见错误和快捷操作
  • Linux学习-文件列太多,很难识别想要的信息在哪列;别焦急,看这里。
  • [Linux学习-文件排序和FASTA文件操作](http://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&mid=2247483823&idx=1&sn=ac62450f0475dc9513e75009f0670f45&chksm=ec0dc425db7a4
    d3300f547caeaee709425dd0a41c86be18aab44d41619a4d18944289b0deaf8#rd”})
  • [用了Docker,妈妈再也不担心我的软件安装了 - 基础篇](http://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&mid=2247483840&idx=1&sn=f87f6dd703cd8c109f6dc5b8d12ffb7c&chk
    sm=ec0dc44adb7a4d5c9ff2422c730b1d7bb18dcb6947c0e7449f1678aee492c3193302174930b4#rd)
  • [Linux服务器数据定期同步和备份方式](http://mp.weixin.qq.com/s?__biz=MzI5MTcwNjA4NQ==&mid=2247483950&idx=1&sn=6f4dbc46a064638d7c95b9f99cb1de70&chksm=ec0dc7a4db7a4
    eb20751dd6567b1c97be7d536671af07707eb57bb1ea7865cbde17a0226a6e0#rd)

但有时也需要在Windows下做一些操作,可能是Linux当前不可用,也可能不值得折腾。

实现Linux下复杂而又简便的操作,VIM配合正则表达式是一个合适的选择。

VIM是一款功能强大的文本编辑工具,也是我在LinuxWindows下编辑程序和文本最常用的工具。

初识VIM

VIM分多种状态模式,写入模式,正常模式,可视化模式。

  • 正常模式:打开或新建文件默认在正常模式,可以浏览,但不可以写入内容。这个模式也可以称作命令行模式,这个模式下可以使用VIM强大的命令行和快捷键功能。其它模式下按ESC就可以到正常模式。
  • 写入模式:在正常模式下按字母i (光标前插入), o (当前光标的下一行操作), O (当前光标的上一行操作),a (光标后插入)都可以进入写入模式,就可以输入内容了。
  • 可视化模式:通常用于选择特定的内容。

进入写入模式后,VIM使用起来可以跟记事本一样了。在写入文字时,可以利用组合键CTRL+nCTRL+p完成写作单词的自动匹配补全,从而加快输入速度,保证输入的前后一致。

正常模式有更强大的快捷键编辑功能,把手从鼠标上解放出来。

  • dd: 删除一行
  • 3dd: 删除一行
  • dw: 删除一个单词
  • d3w: 删除3个单词
  • yy: 复制一行
  • 3yy: 复制三行
  • yw: 复制一个单词
  • p: (小写p)粘贴到下一行
  • P: (大写P)粘贴到上一行
  • >>: 当前行右缩进一个TAB
  • 3>>: 当前行及后2行都向右缩进一个TAB
  • <<: 当前行左缩进一个TAB
  • 3<<: 当前行及后2行都向左缩进一个TAB
  • /word: 查找特定单词

  • u: 撤销上一次操作

  • .: 重复上一次操作
  • CTRL+r: 重做撤销的操作

  • y$: 从当前复制到行尾

  • d$: 从当前删除到行尾

跳转操作

  • gg: 跳到文件开头
  • G: 跳到文件结尾
  • zt: 当前行作为可视屏幕的第一行
  • 5G: 跳到第5行

正常模式下输入冒号进入更强大的命令行定制功能。

  • :5d: 删除第5行
  • :20,24y:复制20到24行
  • :.,+3y:复制当前行和下面3行
  • :2,11>: 右缩进
  • :w: 保存文件
  • :q: 退出编辑器

  • :vsplit: 分屏

键盘操作不容易被捕获,看右下角可以得到一点信息。

VIM还有不少魔性操作,具体可以看这两个帖子:

  • http://coolshell.cn/articles/5426.html
  • http://coolshell.cn/articles/11312.html

VIM中使用正则表达式

这儿以提取生信宝典公众号中发过的原创文章的HTML代码为例子,获得原创文章的名字和链接,用以制作文章列表。

部分数据如下所示,利用正则表达式的第一步就是找规律。

  • 这段文字是JSON格式,列表和字典的组合,使用json函数可以很容易解析。但我们这通过正则表达式解析。
  • title后面跟随的文章的题目; url后面跟随的是文章的链接。
  • {""}标记每篇文章的信息的开始和结束。
  • auth_apply_num是目前不关注的信息。

下面的动画展示了如何通过正则表达式,把这段文字只保留题目和链接,并转成Markdown的格式。

  • :set wrap: 折行显示
  • :s/"}, {"/\r/g: :开启命令行模式;s: 是替换,之前讲Linux命令时也多次提及;/作为分割符,三个一起出现,前两个/中的内容为被替换内容,后两个/中的内容为替换成的内容;这里没有使用正则表达式,直接是原字符的替换,\r表示换行符。这样把每篇文章的信息单行显示,方便后续处理。
  • :%s/auth_apply.*"title":"/[/%表示对所有行进行操作;被替换的内容是auth_applytitle":"及其之间的内容(.*表示,.表示任意字符,*表示其前面的字符出现任意次)
  • :%s/".*"url":"/](/:从题目到url之间的内容替换掉;第一次替换时忘记了第一行中开头还有引号,结果出现了误操作,后面又退回去,手动删除特殊部分,其它部分继续匹配。
  • :%s/$/)/:表示在行尾($)加上), 就组成了Markdown中完整的链接形式[context](link)
  • :%s/^/* /:表示在行首(^)加上*变成Markdown格式的列表

至此就完成了生信宝典公众号文章到Markdown链接的转换,可以放到菜单栏文章集锦里面方便快速查询了。

一步步的处理也有些麻烦,有没有办法更简单些呢?

  • 首先也是把每篇文章的信息处理为单行显示,一样的模式更容易操作,去掉第一行行首不一致的部分
  • 使用上下箭头可以回溯之前的命令,类似于Linux终端下的操作
  • %s/.*title":"\([^"]*\).*url":"\(.*\)/* [\1](\2)/c: 这个是记忆匹配,记录下匹配的内容用于替换,\(\)表示记忆匹配的开始和结束,自身不匹配任何字符,只做标记使用;从左只右, 第一个\(中的内容记录为\1, 第二个\(中的内容记录为\2,以此类推。尤其在存在括号嵌套的情况下,注意匹配位置,左括号出现的顺序为准。在匹配文章题目时使用了[^"]*而不是.*,是考虑到正则表达式的匹配是贪婪的,会囊括更多的内容进来,就有可能出现非预期情况,所以做这么个限定,匹配所有非"内容。

正则表达式在数据分析中有很多灵活的应用,可以解决复杂的字符串抽提工作。常用的程序语言或命令如pytho, R, grep, awk, sed都支持正则表达式操作,语法也大体相似。进一步学习可参考一下链接:

  • VIM正则表达式 http://blog.csdn.net/u014015972/article/details/50688837
  • Pyton正则表达式 https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

招聘

  • 易汉博欢迎您加入

联系我们

2

不用Linux也可以的强大文本处理方法相关推荐

  1. linux nc命令--功能强大的网络工具

    linux nc命令--功能强大的网络工具 Socket长连接 AT指令测试,连接阿里云服务器 EC200S 4G CAT.1模块 nc命令简介 1)端口扫描 2) 远程拷贝文件 3) 简单聊天工具 ...

  2. 介绍linux下Source Insight强大代码编辑器sublime_text_3

    Centos6.4下安装Sublime Text 3 背景 1 一. 运行环境 1 二.安装环境配置 1 三.创建快捷方式 1 四.配置全局环境 2 五.操作界面 3 背景 在windows操作系统系 ...

  3. linux(六)之文本操作

    接下来我们一起来看一下再linux中怎么去对文本进行操作的 一.文本文件 既然要操作文本,所以我们要对文本有一个了解,那什么是文本文件呢. 文本文件是一种由若干行字符构成的计算机文件.文本文件存在于计 ...

  4. Linux入门-7 Linux管道、重定向以及文本处理

    Linux管道.重定向以及文本处理 1 Linux多命令协作:管道及重定向 管道和重定向 2 Linux命令行文本处理工具 文件浏览 基于关键字搜索-grep 基于列处理文本-cut 文本统计-wc ...

  5. Linux下使用Vim粘贴文本错乱问题解决

    Linux下使用Vim粘贴文本错乱问题解决 参考文章: (1)Linux下使用Vim粘贴文本错乱问题解决 (2)https://www.cnblogs.com/wangxiaobei2019/p/12 ...

  6. 如何在Linux上找到包含特定文本的所有文件?

    我正在尝试找到一种方法来扫描整个Linux系统,查找包含特定文本字符串的所有文件. 只是为了澄清,我在文件中寻找文本,而不是文件名. 当我查找如何做到这一点时,我遇到了两次这个解决方案: find / ...

  7. linux c语言定位显示字符,Linux c语言实现修改文本字符串

    要在Linux c 程序里面实现文本的字符串读写,百度一下,都是比较简单的字符串处理,并没有类似的说明,后来换成bing 找到一些蛛丝马迹 http://bbs.csdn.net/topics/390 ...

  8. 我使用过的Linux命令之curl - 强大的网络传输工具

    我使用过的Linux命令之curl - 强大的网络传输工具 http://codingstandards.iteye.com/blog/807844 博客分类: Linux命令 LinuxTomcat ...

  9. linux之使用grep搜索文本

    linux之使用grep搜索文本 -- Page 79 在文件夹中查找匹配内容,并显示行号: grep -r -n "要查找的内容" 目录名 在文件夹中统计包含匹配内容的行号: g ...

最新文章

  1. Linux soft lockup分析
  2. python自动抠头像图_Python实现AI自动抠图实例解析
  3. cname 别名记录 解析过程_云解析是什么?需要购买吗?
  4. P4899-[IOI2018]werewolf 狼人【Kruskal重构树,主席树】
  5. 优先队列——斐波那契堆(without source code)
  6. docker 安装部署nacos
  7. 用matlab的ADC和DAC过程,谈谈我理解的ADC和DAC
  8. apache配置多https域名对应单个证书和多个不同的https域名对应多个不同的证书
  9. jvm压缩指针原理以及32g内存压缩指针失效详解
  10. 大数据锁定消费者没用,核心是锁住用户的“脑袋”!
  11. Cadence Allegro元件更换层图文教程
  12. C# 操作Gmap简单使用方法
  13. python 区块链开发教程_区块链开发教程分享【201904】
  14. 身份证号判断男女和生日
  15. 释放linux缓存 echo 1 > /proc/sys/vm/drop_caches
  16. 七夕情人节送什么礼物给女朋友?音质好的蓝牙耳机推荐
  17. 公民委托诉讼代理人的注意事项
  18. 大数据千亿级离线数仓项目第三天 维度数据分析与业务开发
  19. vulnhub Funbox: 1
  20. 写博客能月入10K?

热门文章

  1. 查找(洛谷P2249题题解,C++语言描述)
  2. 【Git】Python项目依赖库过大无法提交的问题
  3. 【Python】Matplotlib使用Cursor实现UI定位
  4. ANSI C and Microsoft C++中常用的预定义宏以及 宏定义中 # 和 ## 的区别
  5. 在SharePoint网站中访问Webservice被拒绝的解决方法
  6. jqgrid下载,引入
  7. 团队开发冲刺第二阶段8
  8. 明尼苏达推荐系统导论(第一课 欢迎来到RS)
  9. Android自己定义DataTimePicker(日期选择器)
  10. 读教材并提问-回答自己的提问