我在文件中有这一行:
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)
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
您可以简单地使用大多数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替换它们.对于某些类型的文件,例如我刚刚测试过的文件,这会失败.
alias dos2unix="sed -i -e 's/'\"\$(printf '\015')\"'//g' "
Run Code Online (Sandbox Code Playgroud)
用法:
dos2unix file
Run Code Online (Sandbox Code Playgroud)