我有大约 100,000 多个文件,其中包含部分损坏的数据、混合文本+二进制文件(带有 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* ÿì
)
编辑/解决方案:关于 100,000 多个文件,这里有一个版本(关于缺少 ^M 仅在缓存控制行上),仅在缺少 ^M 时匹配(因为并非所有文件都被破坏,这将节省大量时间与“更新!”):
:1,11s/^Cache-Control:.\{-}\zs\(^M*$\)\(^M\)\@<!/\^M/i