文件中每一行都保存为一个以行号作为文件名的独立文件中

11 篇文章 0 订阅

文件中每一行都保存为一个以行号作为文件名的独立文件中

如果一个文件包含有许多文本行,而每一行都是有意义的信息记录。本技巧演示如何把每一行都保存到一个独立文件中(每个文件仅保存一行)。

下面的命令会把当前缓冲区中的每一行都保存到一个单独的文件中:

:g/^/execute '.w '.line('.').'.txt'

第一行保存在文件 1.txt 中,第二行保存在文件 2.txt 中,如此类推。如果某个文件已经存在,那么不会被覆盖。该命令会提示错误信息,并停止执行,从而不会试图进行后续的文件保存动作。如果想要覆盖,把 .w 替换为 .w! 以强制文件覆盖。

以下命令与上面相似,但是它只会保存非空行(空行会跳过):

:g/./execute '.w '.line('.').'.txt'

命令解析:

:g/^/...

global 命令会在匹配到 ^ 模式的每一行都执行一个命令(这里以 ... 表示)。由于该模式会匹配到行首,因此每一行都会匹配到,从而对每一行都会执行以 ... 表示的命令。

execute ...

这会计算以下表达式,并把计算的结果当成一个命令执行。

.w

其中:w 是写(保存)命令,而 . 是一个范围,其引用当前行,因此,该命令只会对当前行进行写操作。

line('.').'.txt'

line('.') 函数得到当前行的行号,并与字符串 .txt 进行拼接。

对于第一行,:g/^/ 会执行命令 execute '.w 1.txt' ,其结果是把当前行(即第一行)写到文件 1.txt 中。

如果只想操作其中的一些行,则可以使用合适的搜索模式。例如,以下命令会操作以 Error 开头的所有行。在匹配到的每种情况下,三行(Error 前面的行,含有Error 的行,和后面的行)会同时保存到以 N.txt 命名的文件中,而 N 表示包含 Error 行的行号。

:g/^Error/execute '.-1,.+1w '.line('.').'.txt'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值