在Unix中从文件中删除所有回车\r的最简单方法是什么?
当前回答
Cat input.csv | sed 's/\r/\n/g' > output.csv
为我工作
其他回答
Cat input.csv | sed 's/\r/\n/g' > output.csv
为我工作
tr -d '\r' < infile > outfile
看到tr (1)
使用sed
sed $'s/\r//' infile > outfile
在Git Bash for Windows上使用sed
sed '' infile > outfile
第一个版本使用ANSI-C引用,如果命令从脚本运行,可能需要转义\。第二个版本利用了这样一个事实,即sed通过删除\r和\n字符逐行读取输入文件。但是,当向输出文件写入行时,它只追加一个\n字符。通过简单地修改IFS,可以设计出更通用的跨平台解决方案
IFS=$'\r\n' # or IFS+=$'\r' if the lines do not contain whitespace
printf "%s\n" $(cat infile) > outfile
IFS=$' \t\n' # not necessary if IFS+=$'\r' is used
警告:此解决方案执行文件名扩展(*,?,[…]如果设置了extglob,则更多)。只有在确定文件不包含特殊字符或需要展开时才使用它。 警告:没有一个解决方案可以处理输入文件中的\。
如果你是一个Vi用户,你可以打开文件并删除回车符:
:%s/\r//g
或与
:1,$ s/^M//
请注意,您应该通过按ctrl-v和ctrl-m键入^M。
我将假设您是指行尾的回车符(CR,“\r”,0x0d),而不是盲目地在文件中(据我所知,您可能将它们放在字符串中间)。使用这个测试文件,只在第一行的末尾加上CR:
$ cat infile
hello
goodbye
$ cat infile | od -c
0000000 h e l l o \r \n g o o d b y e \n
0000017
如果在您的系统上安装了Dos2unix,那么它是正确的选择:
$ cat infile | dos2unix -U | od -c
0000000 h e l l o \n g o o d b y e \n
0000016
如果由于某种原因dos2unix对您不可用,那么sed将执行此操作:
$ cat infile | sed 's/\r$//' | od -c
0000000 h e l l o \n g o o d b y e \n
0000016
如果由于某些原因sed对你不可用,那么ed会以一种复杂的方式来做:
$ echo ',s/\r\n/\n/
> w !cat
> Q' | ed infile 2>/dev/null | od -c
0000000 h e l l o \n g o o d b y e \n
0000016
如果你没有在你的盒子上安装任何这些工具,你有比试图转换文件更大的问题:-)