Vim Regex 重复行分组

2024-07-03

我有一个这样的日志文件:

12 adsflljl
12 hgfahld
12 ash;al
13 a;jfda
13 asldfj
15 ;aljdf
16 a;dlfj
19 adads
19 adfasf
20 aaaadsf

我想将它们“分组”,就像这两个之一一样:

12 adsfllj, 12 hgfahld, 12 ash;al
13 a;jfda, 13 asldfj
15 ;aljdf
16 a;dlfj
19 adads, 19 adfasf
20 aaaadsf

Or

12 adsfllj, hgfahld, ash;al
13 a;jfda, asldfj
15 ;aljdf
16 a;dlfj
19 adads, adfasf
20 aaaadsf

我完全被困住了。如果 vim 不这样做,我也有 sed、awk 和 bash。我只是不想写 bash 脚本,我想增加我的 regex-fu


在 Vim 中你可以使用:

:%s/\(\(\d\+\) .*\)\n\2/\1, \2/g 

这意味着:如果在新行后匹配一组数字,则删除换行符并放置逗号。如果你对他们不熟悉,\1 and \2是反向引用。

不幸的是,这一次只能合并两个事件,因此您必须运行多次才能实现目标。

编辑:一次性完成此操作的一种方法是循环并利用这样一个事实:一旦文件不再匹配,就会发出错误。虽然这个错误有点烦人,但我无法用一行代码做得更好:

:while 1 | :%s/\(\(\d\+\) .*\)\n\2/\1, \2/g | :endwhile
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vim Regex 重复行分组 的相关文章

随机推荐