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