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
文件在视觉上看起来像这样:现在,如果我cat
它,它不打印第一行,只是最后一个-
字符。
如果我使用dos2unix
(实际上只用于删除行结束字符并将Windows格式文件转换为Linux行结束字符格式文件),它仍然无效,因为第一行中的^M
不是该行中的最后一个字符。 PS:如果你注意到,第一个^M
的颜色与第二个颜色不同,我通过输入手动添加。
在此文件上运行od -cab aa.txt
(八进制转储),向我显示:
^M
,字符是\r
,cr sp
和015 040
(即回车和一个看不见的空格字符)。^M
(因为我在第二行手动键入^ M
和^ M
,这是预期的)。题:
1.使用136 115
我可以解决这个问题,但我可以在^
或M
中使用什么模式在命令模式下删除此字符。尝试tr -d '\r' < aa.txt > new.aa.txt
但它没有抓住模式。
你大概使用了一个实际的插入符号,然后是M?那里的角色实际上是一个Ctrl-M,您可以使用Ctrl-V然后按Ctrl-M获得。
类型
:%S / \ R / \ R / G
这是说:
vi
在整个文件中查找和替换(替换)(%)
vim
找到换行符
:%s/^M//g
并替换换行符(或者将其替换为第二个\ r)
:%s
在同一行中多次
我知道这听起来很愚蠢,但在查找部分,vim在\r
下包含windows换行符,在替换部分中vim使用unix换行符。
如果上述方法无效,可能适合您的替代方案:
\r
+ g
如果您正在使用Windows计算机,则以下操作可能有效: