64

我一直在使用d2u转换行尾。安装 Puppy Linux 后,我注意到它没有附带d2u,但是dos2unix。然后我注意到 Ubuntu 默认情况下两者都缺失。

转换行尾的另一种方法是什么?

4

2 回答 2

110

一些选项:

使用tr

tr -d '\15\32' < windows.txt > unix.txt

或者

tr -d '\r' < windows.txt > unix.txt 

使用perl

perl -p -e 's/\r$//' < windows.txt > unix.txt

使用sed

sed 's/^M$//' windows.txt > unix.txt

或者

sed 's/\r$//' windows.txt > unix.txt

要获得^M,您必须键入CTRL-V然后CTRL-M

于 2013-05-27T08:07:06.933 回答
72

使用 POSIX 执行此操作很棘手:

  • POSIX Sed不支持\r\15。即使是这样,就地选项-i也不是 POSIX

  • POSIX Awk确实支持\rand \15,但是该-i inplace选项不是 POSIX

  • d2udos2unix不是POSIX 实用程序,但ex

  • POSIX ex不支持\r, \15,\n\12

要删除回车:

awk 'BEGIN{RS="^$";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

添加回车:

awk 'BEGIN{RS="^$";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
于 2014-01-19T16:53:16.230 回答