在Unix中从文件中删除所有回车\r的最简单方法是什么?
当前回答
使用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,则更多)。只有在确定文件不包含特殊字符或需要展开时才使用它。 警告:没有一个解决方案可以处理输入文件中的\。
其他回答
尝试将DOS文件转换为Unix文件:
fromdos file
你可以简单地这样做:
$ echo $(cat input) > output
Cat input.csv | sed 's/\r/\n/g' > output.csv
为我工作
使用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,则更多)。只有在确定文件不包含特殊字符或需要展开时才使用它。 警告:没有一个解决方案可以处理输入文件中的\。
有一个名为dos2unix的实用程序存在于许多系统上,并且可以在大多数系统上轻松安装。
推荐文章
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 使用sh shell比较字符串
- 只列出UNIX中的目录
- 如何限制从grep返回的结果的数量?
- 如何管道列表的文件返回的找到命令到猫查看所有文件
- 以相对于当前目录的路径递归地在Linux CLI中列出文件
- 如何使用xargs复制名称中有空格和引号的文件?
- 在makefile中抑制命令调用的回声?
- Shell脚本for循环语法
- read()和recv(), send()和write()之间有什么区别?
- 如何将多行输出连接到一行?
- 在Unix中删除回车
- 如何在vi文本编辑器中获得文件的sudo访问权限?
- 查找名称包含字符串的所有文件