我在文件中有这一行:
ULNET-PA,client_sgcib,broker_keplersecurities
,KEPLER
我试图摆脱那个^ M(回车)字符所以我用过:
sed 's/^M//g'
然而,这确实会删除^ 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
我想要获得的是:
[root@localhost tmp]# vi test
ULNET-PA,client_sgcib,broker_keplersecurities,KEPLER
答案 0 :(得分:54)
使用tr
:
tr -d '^M' < inputfile
(请注意,可以使用 Ctrl + V Ctrl + M 输入^M
字符。
编辑:按suggested Glenn Jackman,如果您使用的是bash
,您还可以说:
tr -d $'\r' < inputfile
答案 1 :(得分:14)
仍然是同一行:
sed -i 's/^M//g' file
键入命令时,对于^M
键入 Ctrl + V Ctrl + M
实际上如果你已经在vim中打开了文件,你可以在vim中执行:
:%s/^M//g
同样,^M
您输入Ctrl-V Ctrl-M
答案 2 :(得分:6)
您可以简单地使用大多数Unix / Linux系统中提供的dos2unix。但是我发现以下sed命令更好,因为它删除了^ M,其中dos2unix无法:
sed 's/\r//g' < input.txt > output.txt
希望有所帮助。
注意:^ M实际上是回车符,在代码中表示为\ r \ n dos2unix的作用很可能等同于:
sed 's/\r\n/\n/g' < input.txt > output.txt
当它没有立即跟随\ n时它不会删除\ r \ n并用\ n替换它们。对于某些类型的文件(例如我刚刚测试过的文件),这会失败。
答案 3 :(得分:5)
alias dos2unix="sed -i -e 's/'\"\$(printf '\015')\"'//g' "
用法:
dos2unix file
答案 4 :(得分:3)
如果Perl是一个选项:
perl -i -pe 's/\r\n$/\n/g' file
-i
生成输入文件的.bak版本
\r
=回车
\n
=换行
$
=行尾
s/foo/bar/g
=全局用“bar”代替“foo”
答案 5 :(得分:1)
我同意@twalberg(请参阅上面的accepted answer comments),Mac OSX上的dos2unix涵盖了这一点,引用了man dos2unix
:
要在Mac模式下运行,请使用命令行选项“-c mac”或使用 命令“mac2unix”或“unix2mac”
我决定使用'mac2unix',它删除了我的较少cmd可见的'^ M'条目,由两个Yosemite(OSX 10.10)Mac之间的Apple'Messages'传输bash脚本引入!
我使用流行的Homebrew软件包安装程序在Mac OSX上安装了'dos2unix',我强烈推荐它和它的配套命令Cask。
答案 6 :(得分:1)
在awk中:
sub(/\r/,"")
如果它在记录的末尾,sub(/\r/,"",$NF)
就足够了。无需扫描整个记录。
答案 7 :(得分:1)
这是更好的实现方式
tr -d '\015' < inputfile_name > outputfile_name
稍后将文件重命名为原始文件名。
答案 8 :(得分:0)
这是干净简单的,并且有效:
sed -i 's/\r//g' file
其中\r
当然等同于^M
。