Vim之删除奇偶数行

0

曾经跑过一个测试,测试结果都定向到一个log里,测完之后需要从这个log里提取出两种统计结果分别进行分析,可是这两种结果都在一个log里,怎么办?

幸好这两种统计结果在log里是很有规律的呈现的,即一个都在奇数行,一个都在偶数行,那就非常好办了,无非就是删除奇数行得到所有的偶数行,删除偶数行得到所有的奇数行,于是从网上搜了两个命令,然后就搞定了:

  1. :g/^/d|m.   删除奇数行(注意:有小数点)
  2. :g/^/+1 d   删除偶数行 (注意:没小数点,+1和d之间有空格)

但这两个命令是什么意思呢?完全不懂,于是去查了相关资料。

:g是全局命令“:global”命令的缩写,它允许你找到符合某个匹配模式的行,然后执行command,其通用形式是

:[range]global/{pattern}/{command}

注意:其中的command必须也是vim命令行模式所支持的命令,如:s、:d等……

对于第一条命令:g/^是先标记了所有行,然后执行d|m.命令。d命令即删除第一行,紧接着执行m.命令移动当前行(由于第一行已经被删掉了,所以当前行其实是原文件的第二行,实际上没有移动),m.的操作就是把g/^所标记的所有行的第二行去掉标记,也就是不删除第二行。

对于第二条命令:g/^标记所有行,然后执行+1 d命令,即删除下一行并将光标移动到刚刚删除掉的那行的下一行,这样每次删除的都是源文件的偶数行。

Leave A Reply