Answers
vim的正则
%s/\v((.).*\n)((\2.*\n)+)(\2.*$)/\1\5/g
分成三段解释一下
((.).*\n)
匹配第一行,外层分组用于替换的时候反向引用,内层分组用于后面判断
((\2.*\n)+)
匹配接下来 以上一行第一个字母开头的行(1行或多行)
(\2.*$)
匹配一行以第一行第一个字母开头的行
最后 \1\5 把上面匹配到的所有的行 替换成第一行和最后一行,即删除中间的行
注:最开始的\v是切换到perl正则模式,这样括号、加号就不需要转义了
BTW 这种文本处理的工作用perl脚本完成是最方便的,vi的好处是可视化调试,但是遇到大文件就GG了
我de永恒
answered 10 years, 7 months ago