vim 将文本中连续的多个空行删除为只留一下一个空行

来源:互联网 发布:美国计算机硕士 知乎 编辑:程序博客网 时间:2024/06/06 04:06

将文本中连续的多个空行删除为只留一下一个空行

方法一:

:%s/^\n$//g

这种方式对于那种空行中含有tab键和空格的情况删除不了

方法二:

:g/^\s*$\n\s*$/d

这种情况既能删除只有回车的空行,还能删除包含tab键和空格的空行


删除重复行

:%s/^\(.*\)\n\1$/\1/g


有两个文本,A中第一列表示的是人名,B中第一列表示的也是人名,要求凡是在B中出现的人,都要从A中将对应的行删除掉(这里有个前提条件是AB合并后肯定是偶数行)。

例如:

a.txtlisi  11 22qinys  11 202zhangdong  11   22wangmazi  1  2
b.txtzhangdong  test  testqinys test1 test2


做法:

步骤1:合并两个文本并排序  :vim a.txt中,输入 :r b.txt|sort

步骤2:再去除重复行(key重复出现2次的删除):g/^\(.*\)\s\+.*$\n\1/;+d


有文本如下,要求将第一列的值在文本中出现两次的行全部删掉:

文本:

lisi 11 22qinys 11 202qinys 11 22qinys 11 33zhangdong 11 33zhangdong 11 22zhangdong 11 22testtest111

对于上面的文本即执行后结果应该为:

lisi 11 22
testtest111

解答:g/^\(.*\)\s\+.*$\n\1/,/^[^\1]/ +1 d

备注:

当输入:/^qinys/,/^l/d 时,会提示“使用了逆向的范围,确定交换吗 (y/n)?”
当选择y的时候,则会删除逆向匹配的前两行,否则没有匹配的




0 0
原创粉丝点击