我有一个非常大的文件,我希望删除每行末尾的所有\n
,以便合并所有文件,除非该行以字符£
开头
所以我有这个
data1
data2
£data3
data4
data5
我希望最终得到这个
data1data2
£data3data4data5
我在考虑像
这样的东西:%s/\n(but not \n£)//g
有什么想法吗?
答案 0 :(得分:4)
只需删除所有新行,然后再将它们添加到应有的位置。或者使用负面展望,但这对任何人来说都更简单,更容易理解。
s/\n//g
s/£/\n£/g
答案 1 :(得分:2)
@ pb2q提供的解决方案将删除所有新行和下一个字符如果此字符不是“£”或换行符(因为集合不匹配默认为换行符),而在您的问题中,您要求仅删除换行符。这可以通过使用\ze
或负面预测来解决:
%s/\n\ze\_[^£]
%s/\n£\@!
注意一些事项:首先,如果要删除某些文本,可以省略替换字符串(除非您需要在这种情况下不需要替换标记)。其次,\_
为集合添加换行符。它也可以写成[^£\n]
,但我想这不是你能做到的最好的事情:任何来自PCRE能力语言的人都认为[^£\n]
是“除了'£'之外的任何东西,换行“,而在Vim中它真的”匹配任何东西(包括换行符),除了'£'“。
答案 2 :(得分:0)
我会使用以下命令。
:g/^[^£]/-j!