如何在VI模式下删除^M特殊字符-Can';t使用dos2unix、can';不要用cat或grep打印整行

如何在VI模式下删除^M特殊字符-Can';t使用dos2unix、can';不要用cat或grep打印整行,grep,echo,special-characters,vi,dos2unix,Grep,Echo,Special Characters,Vi,Dos2unix,Linux:RHEL5 Tikanga 版本:2.6.18-402.el5(根据uname-a) 我正在创建一个文件,方法是从windows源文件(其中包含一些Version=x.x.xvalue)中删除一些行,然后将其放入新文件aa.txt。这适用于查找和放大零件 做一些类似于echo-n“AA”的事情;echo“$(grep”Version=[1-9]”/some/mounted/loc/windows/sourcefile.txt)-“>>aa.txt 我必须单独为AA使用echo-n,

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

我正在创建一个文件,方法是从windows源文件(其中包含一些
Version=x.x.x
value)中删除一些行,然后将其放入新文件
aa.txt
。这适用于查找和放大零件

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

  • 我必须单独为
    AA
    使用
    echo-n
    ,即我不能使用
    echo AA
    echo版本部分
    一起使用后一个echo命令
因此,生成的
aa.txt
文件在视觉上如下所示: 现在,如果我
cat
it,它不会打印第一行,只打印最后一个
-
字符

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

在这个文件上运行
od-cab aa.txt
(八进制转储),会显示:

  • 对于第一个
    ^M
    ,字符为
    \r
    cr sp
    015 040
    (即回车符和不可见空格字符)

  • 对于第二行,
    ^M
    ,将正常值显示为
    ^M
    ^M
    136 115
    (当我在第二行手动键入
    ^
    M
    时,这是预期的)

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

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

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

    键入

    :%s/\r/\r/g

    这是说:

    :%s
    在整个文件中查找并替换(替换)()
    \r
    查找回车
    \r
    并替换为换行符(或者在第二行中省去此项而不替换为任何内容)
    g
    在同一行中多次

    我知道这听起来很愚蠢,但在find部分,vim在
    \r
    下包含回车,在replace部分,vim使用换行符

    如果上述方法不起作用,可能对您有效的备选方案

    • 键入以下按键(在正常模式下)与您看到的按键完全一致
      :%s/Ctrl+vCtrl+m//gEnter
    • :e++ff=dos
      +
      :set ff=unix
    如果您使用的是Windows机器,则以下操作可能有效:

    • :%s/Ctrl+qCtrl+m//gEnter
    类型

    :%s/\r/\r/g

    这是说:

    :%s
    在整个文件中查找并替换(替换)()
    \r
    查找回车
    \r
    并替换为换行符(或者在第二行中省去此项而不替换为任何内容)
    g
    在同一行中多次

    我知道这听起来很愚蠢,但在find部分,vim在
    \r
    下包含回车,在replace部分,vim使用换行符

    如果上述方法不起作用,可能对您有效的备选方案

    • 键入以下按键(在正常模式下)与您看到的按键完全一致
      :%s/Ctrl+vCtrl+m//gEnter
    • :e++ff=dos
      +
      :set ff=unix
    如果您使用的是Windows机器,则以下操作可能有效:

    • :%s/Ctrl+qCtrl+m//gEnter

    是,如何在
    vi
    命令模式下删除它。我认为有一系列字符,你必须按下
    vi
    来捕捉它,比如
    转义+[[+M
    或类似。是的,正如我所说,顺序是Ctrl-V Ctrl-M。Ctrl-V告诉
    vi
    下一个字符应该按原样,而不是它的正常功能。是的,在
    vi
    命令模式下如何删除它。我想有一个字符序列,你必须按下
    vi
    才能捕捉到它类似于越狱的方法+[[+M或类似。是的,正如我所说,顺序是Ctrl-V Ctrl-M。Ctrl-V告诉
    vi
    下一个字符应该按原样使用,而不是使用它的正常功能。这是不正确的。要查找新行,您应该使用
    \n
    \r
    来替换。这是什么意思?当您搜索
    \r
    你不会找到新行,你只会找到回车,如果有的话。看啊,我看到问题了,我用的是“换行”和“回车”可互换。我现在编辑我的回答。这是不正确的。要查找新行,你应该使用
    \n
    \r
    用于替换。你是什么意思?当你搜索
    \r
    时,你不会找到新行,你只会找到回车,如果有的话。看啊,我看到问题了,我使用了术语“换行”和“回车”互换。我现在编辑我的回复。