如何在VI模式下删除^M特殊字符-Can';t使用dos2unix、can';不要用cat或grep打印整行
Linux:RHEL5 Tikanga 版本:2.6.18-402.el5(根据uname-a) 我正在创建一个文件,方法是从windows源文件(其中包含一些如何在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,
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
- :%s/Ctrl+qCtrl+m//gEnter
:%s
在整个文件中查找并替换(替换)()\r
查找回车\r
并替换为换行符(或者在第二行中省去此项而不替换为任何内容)g
在同一行中多次
我知道这听起来很愚蠢,但在find部分,vim在\r
下包含回车,在replace部分,vim使用换行符
如果上述方法不起作用,可能对您有效的备选方案:
- 键入以下按键(在正常模式下)与您看到的按键完全一致
:%s/Ctrl+vCtrl+m//gEnter
+:e++ff=dos
:set ff=unix
- :%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
时,你不会找到新行,你只会找到回车,如果有的话。看啊,我看到问题了,我使用了术语“换行”和“回车”互换。我现在编辑我的回复。