不用Linux也可以的强大文本处理方法

不用Linux也可以的强大文本处理方法

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

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

主要文章列举如下:

Linux学习-文件和目录

Linux学习-文件操作

Linux文件内容操作

Linux学习-环境变量和可执行属性

Linux学习 - 管道、标准输入输出

Linux学习 - 命令运行监测和软件安装

Linux学习-常见错误和快捷操作

Linux学习-文件列太多,很难识别想要的信息在哪列;别焦急,看这里。

Linux学习-文件排序和FASTA文件操作

用了Docker,妈妈再也不担心我的软件安装了 - 基础篇

Linux服务器数据定期同步和备份方式

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

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

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

初识VIM

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

正常模式:打开或新建文件默认在正常模式,可以浏览,但不可以写入内容。这个模式也可以称作命令行模式,这个模式下可以使用VIM强大的命令行和快捷键功能。其它模式下按ESC就可以到正常模式。

写入模式:在正常模式下按字母i (光标前插入), o (当前光标的下一行操作), O (当前光标的上一行操作),a (光标后插入)都可以进入写入模式,就可以输入内容了。

可视化模式:通常用于选择特定的内容。

进入写入模式后,VIM使用起来可以跟记事本一样了。在写入文字时,可以利用组合键CTRL+n和CTRL+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: 分屏

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

ttp://blog.genesino.com/images/vim/vim_basic_operation.gif (公众号传个GIF总失败,也不提示失败原因,请大家移步原文或自己点击查看gif了)

在这里插入图片描述

在这里插入图片描述

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

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

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

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

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

这段文字是JSON格式,列表和字典的组合,使用json函数可以很容易解析。但我们这通过正则表达式解析。

title后面跟随的文章的题目; url后面跟随的是文章的链接。

{“和”}标记每篇文章的信息的开始和结束。

auth_apply_num是目前不关注的信息。

:set wrap: 折行显示

😒/“}, {”/\r/g: :开启命令行模式;s: 是替换,之前讲Linux命令时也多次提及;/作为分割符,三个一起出现,前两个/中的内容为被替换内容,后两个/中的内容为替换成的内容;这里没有使用正则表达式,直接是原字符的替换,\r表示换行符。这样把每篇文章的信息单行显示,方便后续处理。

:%s/auth_apply.*“title”:“/[/:%表示对所有行进行操作;被替换的内容是auth_apply和title”:"及其之间的内容(.*表示,.表示任意字符,*表示其前面的字符出现任意次)

:%s/“.*“url”:”/](/:从题目到url之间的内容替换掉;第一次替换时忘记了第一行中开头还有引号,结果出现了误操作,后面又退回去,手动删除特殊部分,其它部分继续匹配。

:%s/ / ) / :表示在行尾 ( /)/:表示在行尾( /)/:表示在行尾()加上), 就组成了Markdown中完整的链接形式context。

:%s/^/* /:表示在行首(^)加上*变成Markdown格式的列表

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

一步步的处理也有些麻烦,有没有办法更简单些呢?(原文看动画)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

首先也是把每篇文章的信息处理为单行显示,一样的模式更容易操作,去掉第一行行首不一致的部分

使用上下箭头可以回溯之前的命令,类似于Linux终端下的操作

%s/.title":“([^”]).url":"(.)/* \1/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

P16 vim学习和应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/551398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营DAY25|C++回溯算法Part.2|216. 组合总和II、17.电话号码的字母组合

文章目录 216. 组合总和II题意理解树形结构伪代码实现剪枝操作CPP代码实现 17.电话号码的字母组合解题思路树形结构伪代码实现隐藏回溯CPP代码 216. 组合总和II 力扣题目链接 文章讲解&#xff1a;216. 组合总和III 视频讲解&#xff1a;和组合问题有啥区别&#xff1f;回溯算法…

python复制文件夹内容

参考博客 https://blog.csdn.net/itfans123/article/details/133710731 案例1 import os import shutildef copy_folder(source_folder, destination_folder):# 创建目标文件夹os.makedirs(destination_folder, exist_okTrue)# 遍历源文件夹中的所有文件和文件夹for item in …

【简单讲解下如何用爬虫玩转石墨文档】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

力扣算法-回溯

递归 104.二叉树的最大深度 回溯 17.电话号码的字母组合 ①子集型回溯 78.子集 (1)选不选 (2)选哪个 131.分割回文串 &#xff08;1593.拆分字符串使唯一子字符串的数目最大 也可以用这个思路解&#xff1a;从结果角度&#xff0c;分割字符串&#xff09; ②组合型回溯…

【C++】哈希二

上篇博客我们写了解决哈希冲突的两种办法&#xff0c;不过我们写的都是针对整形的&#xff0c;而在实际情况下&#xff0c;要存入哈希表中的数据可以是string或自定义类型等等。那么我们就应该想一种办法去解决这里的问题。 比如说string&#xff0c;我们想到如何让string也转为…

代码随想录算法练习Day11:链表相交

题目&#xff1a;给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 题目链接&#xff1a;160.链表相交 题目思路&#xff1a;定义两个指针&#xff0c;分别遍历两链表&#xff0c;如…

后端获取请求体Body,将请求体进行解密放回Request请求,并能通过@RequestBody获取

目前系统发送的post和put请求都是没有加密数据。客户需要将请求体加密。而系统已经基本开发完成&#xff0c;不可能一个一个去修改发送的请求。就需要在发送请求时候在拦截器中将body进行加密。并且在后端进行请求过滤解密&#xff0c;并且能通过RequestBody继续获取对象。 1.…

RuoYi-Cloud部署实战(手动部署)

RuoYi-Cloud部署实战 语雀 1. 若依源码和架构 RuoYi-Cloud: &#x1f389; 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统&#xff0c;同时提供了 Vue3 的版本 若依项目结构 带端口号的是需要启动的服务 com.ruoyi ├── ruoyi-ui …

各大厂都推出鸿蒙APP了,你就一定要学习一下鸿蒙APP测试了!

2023年8月&#xff0c;华为推出鸿蒙4.0&#xff0c;由于其广泛的用户基础和品牌传播力&#xff0c;在短短几个月的时间&#xff0c;使用鸿蒙4.0系统的设备就达到千万级别&#xff0c;并且在9月份发售Mate 6之后&#xff0c;还在装机量的增长更加迅猛。 基于此&#xff0c;11月…

德立电子授权世强先进代理分销,加速车规级磁性元器件产品拓展

为提供先进、可靠的磁性元件产品&#xff0c;世强先进&#xff08;深圳&#xff09;科技有限公司与惠州市德立电子有限公司&#xff08;下称“德立电子”&#xff0c;英文名&#xff1a;DDY&#xff09; 签署授权代理合作协议&#xff0c;旨在为汽车电子、工业、消费、通信、医…

Java GUI制作双人对打游戏(上)

文章目录 前言什么是Java GUI一、打开IDEA 新建一个Maven项目(后续可以打包、引入相关依赖也很容易)二、引入依赖三.绘制UI界面四.绘制JPanel面板总结 前言 什么是Java GUI Java UI&#xff0c;即Java用户界面&#xff0c;是指使用Java编程语言创建的图形用户界面&#xff08…

实现分布式锁

实现分布式锁的两个核心&#xff1a; 一、获取锁 1、获取锁线程互斥性 为了实现只有一个线程能继续执行业务代码&#xff0c;必须保证获取锁具有互斥性&#xff0c;即只有一个线程能获取到锁。 Redis中操作数据是单线程的&#xff0c;可以使用Redis提供的set nx ex命令获取锁。…

鸿蒙原生应用元服务-访问控制(权限)开发等级和类型

一、权限等级说明 根据接口所涉数据的敏感程度或所涉能力的安全威胁影响&#xff0c;ATM模块定义了不同开放范围的权限等级来保护用户隐私。 应用APL等级说明 元能力权限等级APL&#xff08;Ability Privilege Level&#xff09;指的是应用的权限申请优先级的定义&#xff0c;…

Ubuntu 22.04 安装 zabbix

Ubuntu 22.04 安装 zabbix 1&#xff0c;Install Zabbix repository2&#xff0c;安装Zabbix server&#xff0c;Web前端&#xff0c;agent3&#xff0c;安装mysql数据库3.1 创建初始数据库3.2 导入初始架构和数据&#xff0c;系统将提示您输入新创建的密码。3.3 在导入数据库架…

课题学习(二十一)----姿态更新的四元数算法推导

声明&#xff1a;本人水平有限&#xff0c;博客可能存在部分错误的地方&#xff0c;请广大读者谅解并向本人反馈错误。    最近需要使用AEKF对姿态进行结算&#xff0c;所以又对四元数进了深入的学习&#xff0c;本篇博客仅对四元数进行推导&#xff0c;后续会对基于四元数的…

kafka学习笔记03

SpringBoot2.X项目搭建整合Kafka客户端依赖配置 用自己对应的jdk版本。 先加上我们的web依赖。 添加kafka依赖: SpringBoot2.x整合Kafka客户端adminApi单元测试 设置端口号。 新建一个kafka测试类&#xff1a; 创建一个初始化的Kafka服务。 设置kafka的名称。 测试创建kafka。…

Gitee和Git学习笔记

Gitee和Git指令 Gitee提交代码方法1 先将仓库clone到本地&#xff0c;修改后再push到 Gitee 的仓库方法2 本地初始化一个仓库&#xff0c;设置远程仓库地址后再做push 切换分支下载代码通过git clone克隆仓库通过下载 ZIP 的方式下载代码 Git提交指令 解决本地库同时关联GitHub…

数据库SQL语言实战(三)

删除操作 本篇文章重点在于SQL中的各种删除操作 题目一 删除表中的学号不全是数字的那些错误数据&#xff0c;学号应该是数字组成&#xff0c;不能够包含字母空格等非数字字符。方法之一&#xff1a;用substr函数&#xff0c;例如Substr(sid,1,1)返回学号的第一位&#xff0…

数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对博主首页也很感兴趣o (ˉ▽ˉ&#xff1b;) 博主首页&#xff0c;更多redis、java等优质好文以及各种保姆级教程等您挖掘&#xff01; 目录 需求分析 常用案例举例 加盐加密逻辑如何对比原数据&…

分布式光纤测温解决方案

安科瑞电气股份有限公司 祁洁 15000363176 一、方案介绍 分布式光纤测温&#xff08;DTS&#xff09;集光电信号检测、计算机技术等为一体&#xff0c;具有实时监测、测温精度高、测量距离长、可精确定位、采用光纤作为传感器和传输介质&#xff0c;具有抗电磁干扰、本征防…