如何在VI模式下删除^ M特殊字符 - 无法使用dos2unix删除,无法打印整行做cat或grep

问题描述 投票:0回答:2

Linux:RHEL5方法版本:2.6.18-402.el5(每个uname -a)

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

做它像echo -n "AA "; echo "$(grep "Version=[1-9]" /some/mounted/loc/windows/sourcefile.txt) -" >> aa.txt

  • 我必须分别使用echo -n用于AA,即我不能用echo AA与后者的echo命令联系echo version part

因此,结果aa.txt文件在视觉上看起来像这样:enter image description here现在,如果我cat它,它不打印第一行,只是最后一个-字符。

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

在此文件上运行od -cab aa.txt(八进制转储),向我显示:

  1. 对于第一个^M,字符是\rcr sp015 040(即回车和一个看不见的空格字符)。
  2. 对于第二行,qazxsw poi,显示正常值为qazxsw poi,qazxsw poi和^M(因为我在第二行手动键入^ M^ M,这是预期的)。

题: 1.使用136 115我可以解决这个问题,但我可以在^M中使用什么模式在命令模式下删除此字符。尝试tr -d '\r' < aa.txt > new.aa.txt但它没有抓住模式。

grep echo special-characters vi dos2unix
2个回答
1
投票

你大概使用了一个实际的插入符号,然后是M?那里的角色实际上是一个Ctrl-M,您可以使用Ctrl-V然后按Ctrl-M获得。


0
投票

类型

:%S / \ R / \ R / G

这是说:

vi在整个文件中查找和替换(替换)(%) vim找到换行符 :%s/^M//g并替换换行符(或者将其替换为第二个\ r) :%s在同一行中多次

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

如果上述方法无效,可能适合您的替代方案:

  • 完全按照您的方式键入以下键(在正常模式下) :%S /按Ctrl + VCTRL + M // G输入
  • \r + g

如果您正在使用Windows计算机,则以下操作可能有效:

  • :%S /按Ctrl + qCtrl + M // G输入
© www.soinside.com 2019 - 2024. All rights reserved.