0

Linux:RHEL5 Tikanga 版本:2.6.18-402.el5(根据 uname -a)

我通过从 Windows 源文件(包含一些Version=x.x.x值)中提取某些行并将其放入新文件来创建文件aa.txt。这适用于查找和 grepping 部分。

做类似的事情echo -n "AA "; echo "$(grep "Version=[1-9]" /some/mounted/loc/windows/sourcefile.txt) -" >> aa.txt

  • 我必须单独使用echo -nAA即我不能echo AA使用echo version part后一个 echo 命令。

因此,生成的aa.txt文件在视觉上看起来像这样: 在此处输入图像描述 现在,如果我cat这样做,它不会打印第一行,只打印最后一个-字符。

如果我使用dos2unix(它实际上只用于删除行结束字符并将 Windows 格式文件转换为 Linux 行结束字符格式文件),它仍然无法正常工作,因为^M第一行不是该行中的最后一个字符。PS:如果您注意到,第一行的颜色^M与第二行的颜色不同,这是我通过键入手动添加的。

在这个文件上运行od -cab aa.txt(八进制转储),告诉我:

  1. 首先^M,字符是\r, cr sp015 040(即回车和不可见的空格字符)。

  2. 对于第二行,^M, 向我显示正常值^ M,^ M136 115(当我手动输入时^M在第二行中,这是预期的)。

问题:
1. 使用tr -d '\r' < aa.txt > new.aa.txt我可以解决这个问题,但是我可以在命令模式中使用什么模式vivim删除这个字符。试过了:%s/^M//g,但没有捕捉到模式。

4

2 回答 2

2

您大概使用了一个实际的插入符号,后跟一个 M?那里的字符实际上是一个 Ctrl-M,您可以使用 Ctrl-V 后跟 Ctrl-M 来获得它。

于 2019-02-21T02:18:59.327 回答
1

类型

:%s/\r/\r/g

这是在说:

:%s在整个文件 (%) 中查找和替换(替换)在同一行中多次
\r查找回车
\r并用换行符替换(或者通过将第二个 \r 省略来替换它)
g

我知道这听起来很愚蠢,但在查找部分,vim 在替换部分下和替换部分中包含回车符,\rvim 使用换行符。

如果上述方法不起作用,可能对您有用的替代方案:

  • 完全按照您看到的方式键入以下键(在正常模式下)
    :%s/Ctrl+ vCtrl+m//gEnter
  • :e ++ff=dos+:set ff=unix

如果您在Windows机器上工作,则以下可能有效:

  • :%s/Ctrl+ qCtrl+m//gEnter
于 2019-03-01T08:48:12.623 回答