转换行结尾

时间:2013-05-27 08:01:15

标签: bash shell sed command-line dos2unix

我一直在使用d2u转换行结尾。安装Puppy Linux后我 注意到它不是d2u,而是dos2unix。然后我注意到了 默认情况下,Ubuntu都缺少。

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

2 个答案:

答案 0 :(得分:87)

一些选项:

使用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

答案 1 :(得分:65)

使用POSIX执行此操作非常棘手:

  • POSIX Sed不支持\r\15。即使它确实如此,到位 选项-i不是POSIX

  • POSIX Awk支持\r\15,但是-i inplace选项 不是POSIX

  • d2u dos2unix 不是POSIX utilities,但 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