转换行结尾

54 bash shell command-line dos2unix sed

我一直在使用d2u转换行结尾.安装Puppy Linux后,我发现它没有附带d2u,但是dos2unix.然后我注意到默认情况下Ubuntu都丢失了.

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

jay*_*ngh 94

一些选择:

运用 tr

tr -d '\15\32' < windows.txt > unix.txt
Run Code Online (Sandbox Code Playgroud)

要么

tr -d '\r' < windows.txt > unix.txt 
Run Code Online (Sandbox Code Playgroud)

运用 perl

perl -p -e 's/\r$//' < windows.txt > unix.txt
Run Code Online (Sandbox Code Playgroud)

运用 sed

sed 's/^M$//' windows.txt > unix.txt
Run Code Online (Sandbox Code Playgroud)

要么

sed 's/\r$//' windows.txt > unix.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 在我的Mac上只有这个工作:`tr -d'\ r'<windows.txt> unix.txt` (8认同)
  • 我在mac上学到了你不能用tr打开并写入同一个文件.这会产生一个空白文件,但写一个不同的名称效果很好! (2认同)
  • @Loren我认为这应该是你对任何重定向的假设。目标文件在读取源文件之前打开。有些命令允许您“就地”执行操作,例如“sed”的“-i”,但无论如何使用中间/备份文件 (2认同)

小智 67

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

要删除回车:

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

要添加回车:

awk 'BEGIN{RS="^$";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file
Run Code Online (Sandbox Code Playgroud)

  • 这项工作在**同一个文件**,即。它就地替换行尾。而`tr` 解决方案需要不同的文件作为输出。 (2认同)