使用sed从文件中删除^ M个字符

SoS*_*Sed 28 awk sed

我在文件中有这一行:

ULNET-PA,client_sgcib,broker_keplersecurities
,KEPLER
Run Code Online (Sandbox Code Playgroud)

我试图摆脱^ M(回车)字符,所以我使用:

sed 's/^M//g'
Run Code Online (Sandbox Code Playgroud)

但是这确实删除了^ M后的所有内容:

[root@localhost tmp]# vi test
ULNET-PA,client_sgcib,broker_keplersecurities^M,KEPLER

[root@localhost tmp]# sed 's/^M//g' test
ULNET-PA,client_sgcib,broker_keplersecurities
Run Code Online (Sandbox Code Playgroud)

我想要获得的是:

[root@localhost tmp]# vi test
ULNET-PA,client_sgcib,broker_keplersecurities,KEPLER
Run Code Online (Sandbox Code Playgroud)

dev*_*ull 57

用途tr:

tr -d '^M' < inputfile
Run Code Online (Sandbox Code Playgroud)

(注意^M可以输入字符Ctrl+VCtrl+M)


编辑:正如格伦杰克曼建议的,如果你正在使用,你也可以说:bash

tr -d $'\r' < inputfile
Run Code Online (Sandbox Code Playgroud)

  • 如果你正在使用bash,你可以写`tr -d $'\ r'` (10认同)
  • +1是最简单的解决方案。还要注意,您可以在tr中使用八进制代码,例如`tr -d'\ 012'`来删除换行符。您可以使用“ od -bc inputfile”来浏览什么代码表示文件中的含义和位置。 (3认同)

Ken*_*ent 14

仍然是同一行:

sed -i 's/^M//g' file
Run Code Online (Sandbox Code Playgroud)

键入命令时,^M键入Ctrl+VCtrl+M

实际上,如果你已经在vim中打开了文件,你可以在vim中执行:

:%s/^M//g
Run Code Online (Sandbox Code Playgroud)

同样, ^M你输入Ctrl-V Ctrl-M


Ang*_*rty 8

您可以简单地使用大多数Unix/Linux系统中提供的dos2unix.但是我发现以下sed命令更好,因为它删除了^ M,其中dos2unix无法:

sed 's/\r//g' < input.txt >  output.txt
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

注意:^ M实际上是回车符,它在代码中表示为\ r \ndom2unix的作用最有可能等同于:

sed 's/\r\n/\n/g' < input.txt >  output.txt
Run Code Online (Sandbox Code Playgroud)

当它没有立即跟随\n时它不会删除\ r \n并且只用\n替换它们.对于某些类型的文件,例如我刚刚测试过的文件,这会失败.


lin*_*ing 6

alias dos2unix="sed -i -e 's/'\"\$(printf '\015')\"'//g' "
Run Code Online (Sandbox Code Playgroud)

用法:

dos2unix file
Run Code Online (Sandbox Code Playgroud)