如何从不存在dos2unix,perl,tr和sed的文件中删除Ctrl-M?


9

假设你正在一个很旧的Unix服务器上,其中dos2unixperltr,和sed不存在。如何将文件从dos转换为unix格式?


允许使用sed吗?
elmarco 2010年

@elmarco:不:(
Hemant 2010年

9
如何不老UNIX服务器必须是没有trsedsed很老了…….. iirc,
xenoterracide 2010年

1
exed提供这样的一个系统?如果不存在或,我不会将其称为unixtrsed
MattBianco 2011年

3
不是sed吗 真!?出于兴趣,系统是什么?正如Gilles和MattBianco所指出的那样,ed至少它可能还会有。
Mikel

Answers:


12

我认为您是指删除行末的插入符号M。您可以在vi中使用搜索和替换来执行此操作。

在vi中,我通常这样做:(其中“ ^”代表CTRL):

:%s/^V^M//g

在屏幕上显示为:

:%s/^M//g

谢谢你的工作:)。我认为这是一种非常便携的解决方案。
Hemant 2010年

4
您也可以使用sed来执行相同的操作,而不必删除文件:sed -e'%s / ^ V ^ M // g'filename也将在屏幕上显示为sed e'%s / ^ M // g'文件名通常,如果可以在vim中搜索/替换文件名,则sed中的命令实际上是相同的。
gabe。

2
@gabe:sed解决方案实际上甚至更可移植+1 :)
wzzrd

@wzzrd,sed并且vi两者都通过POSIX指定,并且vi命令不使用任何Vim的扩展。
通配符

@jjclarkson ^V和'^ M'是什么意思?
cokedude '16

6

没有trsed必须很旧的服务器,或者缺少一些基本命令。希望ed在那里;它存在于Unix第一版中

ed /path/to/file
1,$s/^V^M$//
w
q

其中^V^M表示输入Ctrl+ V然后Ctrl+ M(输入文字换行符)。如果您知道所有行都以CR LF结尾,则可以1,$s/.$//改用(随意删除每行的最后一个字符)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.