Suppose you are working on a very old unix server where dos2unix, perl, tr, and sed are not present. How can you convert files from dos to unix format?
Asked
Active
Viewed 3,449 times
9
user664833
- 199
- 1
- 5
Hemant
- 6,834
- 5
- 38
- 42
-
sed is allowed? – elmarco Aug 12 '10 at 15:11
-
@elmarco: no :( – Hemant Aug 12 '10 at 15:20
-
I am trying using vi but no luck till now – Hemant Aug 12 '10 at 15:21
-
9How old does a unix server have to be to not have `tr` and `sed` ? `sed` is old........ iirc, – xenoterracide Nov 07 '10 at 23:25
-
Is there a C complier? :) – alex Nov 08 '10 at 08:44
-
1Would `ex` or `ed` be available on a system like that? I would'nt call it *unix* if there is no `tr` or `sed`. – MattBianco Mar 31 '11 at 06:52
-
3No `sed`? Really!? Out of interest, what is the system? As Gilles and MattBianco point out, it would probably still have `ed` at least. – Mikel Mar 31 '11 at 21:03
2 Answers
12
I think you are referring to removing the caret-M at the end of lines. You can use search and replace in vi to do this.
In vi I normally do: (where "^" represents CTRL):
:%s/^V^M//g
Which shows on the screen as:
:%s/^M//g
jjclarkson
- 2,147
- 2
- 17
- 16
-
-
4You can also use sed to do the same thing w/out having to vim the file: sed -e '%s/^V^M//g' filename That also will show on the screen as sed e '%s/^M//g' filename In general, if you can search/replace it in vim, the command is virtually the same in sed. – gabe. Aug 12 '10 at 19:09
-
2
-
@wzzrd, `sed` and `vi` are both [specified by POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/), and that `vi` command doesn't use any Vim extensions. – Wildcard Apr 16 '16 at 02:11
-
-
@gabe. is my sed to old to do this `$ sed -e '%s/^M//g' cookies sed: -e expression #1, char 1: unknown command: `%' ` ? – cokedude Apr 28 '16 at 22:11
6
A server without tr or sed would have to be really old, or missing some basic commands. Hopefully ed is there; it existed in Unix first edition.
ed /path/to/file
1,$s/^V^M$//
w
q
where ^V^M means typing Ctrl+V then Ctrl+M (to enter a literal line feed). If you know that all lines do end in CR LF, you can use 1,$s/.$// instead (indiscriminately remove the last character on each line).
Gilles 'SO- stop being evil'
- 807,993
- 194
- 1,674
- 2,175