在Unix中从文件中删除所有回车\r的最简单方法是什么?
当前回答
Sed -i s/\r// <文件名>或someesuch;请参阅man sed或web上有关sed使用的丰富信息。
有一点需要指出的是上面“马车返回”的确切含义;如果您真正指的是单个控制字符“回车”,那么上面的模式是正确的。如果您指的是更一般的CRLF(回车和换行,这是Windows下换行的实现方式),那么您可能希望替换\r\n。Linux/Unix中的换行符(换行符)是\n。
其他回答
tr -d '\r' < infile > outfile
看到tr (1)
你可以简单地这样做:
$ echo $(cat input) > output
在任何UNIX®系统上删除\r:
这个问题中的大多数现有解决方案都是特定于gnu的,在OS X或BSD上不起作用;下面的解决方案可以在更多的UNIX系统上工作,也可以在从tcsh到sh的任何shell中工作,甚至还可以在GNU/Linux上工作。
在OS X、OpenBSD和NetBSD的tcsh上测试,在Debian GNU/Linux的bash上测试。
对话:
在OS X上的tcsh中,下面的sed代码片段可以与printf一起使用,因为sed和echo都不像GNU那样以特殊的方式处理\r:
sed `printf 's/\r$//g'` input > output
tr:
另一个选项是tr:
tr -d '\r' < input > output
sed和tr的区别:
看起来tr从输入文件中保留了一个尾随换行符,而在OS X和NetBSD(但在OpenBSD或GNU/Linux上没有)上的sed在文件的最后插入一个尾随换行符,即使输入在文件的最后缺少任何尾随\r或\n。
测试:
这里有一些测试示例,可以使用printf和hexdump -C来确保它在您的系统上工作;另外,如果你的系统缺少hexdump,也可以使用od -c:
% printf 'a\r\nb\r\nc' | hexdump -C
00000000 61 0d 0a 62 0d 0a 63 |a..b..c|
00000007
% printf 'a\r\nb\r\nc' | ( sed `printf 's/\r$//g'` /dev/stdin > /dev/stdout ) | hexdump -C
00000000 61 0a 62 0a 63 0a |a.b.c.|
00000006
% printf 'a\r\nb\r\nc' | ( tr -d '\r' < /dev/stdin > /dev/stdout ) | hexdump -C
00000000 61 0a 62 0a 63 |a.b.c|
00000005
%
事情是这样的,
%0d是回车字符。使它与Unix兼容。我们需要使用下面的命令。
dos2unix fileName。extension fileName.extension
如果你是一个Vi用户,你可以打开文件并删除回车符:
:%s/\r//g
或与
:1,$ s/^M//
请注意,您应该通过按ctrl-v和ctrl-m键入^M。
推荐文章
- 如何在父进程退出后使子进程死亡?
- Unix列表命令'ls'可以输出数值chmod权限吗?
- 在Unix中,我可以在一个目录中运行'make'而不首先cd'到该目录吗?
- 快速unix命令显示文件中间的特定行?
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 使用sh shell比较字符串
- 只列出UNIX中的目录
- 如何限制从grep返回的结果的数量?
- 如何管道列表的文件返回的找到命令到猫查看所有文件
- 以相对于当前目录的路径递归地在Linux CLI中列出文件
- 如何使用xargs复制名称中有空格和引号的文件?
- 在makefile中抑制命令调用的回声?
- Shell脚本for循环语法
- read()和recv(), send()和write()之间有什么区别?