我有一个文件,其中包含具有制表符分隔格式的记录,但在两行中,我想使用 vim 编辑器模式匹配将具有制表符分隔值的记录排列在一行中。
前任。
Abc PQR XYZ NMW
XYX PQR LMW
PLX PXQ LPN PWF
XYQ PLP PMQ LWP
我想将记录的第二行添加到记录的第一行。我想要的输出格式是这样的。
Abc PQR XYZ NMW XYX PQR LMW
PLX PXQ LPN PWF XYQ PLP PMQ LWP
我尝试使用以下命令来解决我的问题。
:%s/\n(\w\+.*)/\t\1/cgi
这是用除第一行之外的前面的制表符替换每行数据。
我们如何使用 vim 模式匹配和替换来解决这个问题?
答案1
怎么样
:%s/\n\s\+/\t/gc
这将找到后面跟着空格的任何换行符,并将其全部替换为制表符,从而组合您的行。
答案2
如果您知道第一行始终以字母开头,第二行始终以制表符开头,那么最简单的方法可能是使用:g
(在与正则表达式匹配的所有行上运行 ex 命令) 和j!
(join不删除空格)。看看help :g
和help :j
。结合这些,你会得到
:%g/^\w/j!
答案3
您可以使用以下方法轻松完成paste
:
paste -sd'\0\n' file
在vim
:
:%!paste -sd'\0\n' -