Vim(7.3.3 Windows 64位):如果没有,则在行尾添加^M(ff=unix)



我有大约100000多个文件,其中包含部分损坏的数据、混合文本+二进制文件(一个带有http标头的jpg图像数据文件),其中一些标头字段具有dos样式^M^J行终止,而一些仅具有unix样式^J。当vim打开这样的文件时,它会将其视为unix格式。因此,所有没有^M的标题行都需要添加一个。但事实证明,这是非常艰难的。

:1,11s/Cache-Control:.*zs^M{0,}$/^M/

不起作用,我已经尝试了各种各样的变体,甚至使用\=printf("%s","^M")作为替换字符串。但结果总是在文件中出现一个新的空行。

我能通过命令添加^m的唯一方法是通过

:exe "normal A<c-q><c-m><Esc>"

好的,所以一种方法是首先删除任何现有的^M,然后按前一个添加它。但是,还有更优雅的单命令解决方案吗?

(为了避免更多的误解,下面是这样一个文件的简短示例:

HTTP/1.1 200 OK
Server: Apache/2.2.3
(more lines...)
Cache-Control: public, max-age=214748
(more lines...)
ÿØÿá Exif  II*            ÿì

)

编辑/解决方案:关于100000多个文件,这里有一个版本(关于仅在缓存控制行上缺少^M),只有在缺少^M时才匹配(因为不是所有文件都被损坏,这将与"更新!"一起节省大量时间):

:1,11s/^Cache-Control:.{-}zs(^M*$)(^M)@<!/^M/i

单个命令可能看起来像:v/^M/s/$/^M/。这使用<C-v><C-m>,也就是说。。。它插入一个用反斜杠转义的文本^M字符。

最新更新