我正在尝试使用sed一行来删除使用手提式sed单线之一的尾随换行符
sed --in-place -e :a -e '/^\n*$/{$d;N;ba}'它适用于UNIX风格的换行符,但不适用于DOS风格的换行符。尽管我无法完全理解sed脚本语法和匹配规则,但我还是尝试了这样做:
sed --binary --in-place -e :a -e '/^\(\r\?\n\)*$/{$d;N;ba}'但没什么用,我也不知道为什么。
我真的不想使用Perl等等,我想坚持使用更多的“核心”实用程序。那么,周围有什么sed大师吗?我非常感谢你的帮助。我在使用Cygwin的sed发行版。
谢谢。
具体来说,我希望这个文件(使用cat -A打印出来):
1^M$
^M$
^M$变成这样:
1$发布于 2015-12-13 20:29:24
是啊,起作用了:
sed --binary --in-place -e :a -e '/^\(\r\n\)*\r$/{$d;N;ba}'希望真的删除这个问题,但为时已晚。
发布于 2015-12-13 19:10:03
你想用错误的工具来做这份工作。sed是用于单个行上的简单替换,仅此而已。对于更有趣的东西,您应该使用awk,例如,使用GNU awk的一种方法是:
$ cat -v file
1^M
^M
^M
$ awk -v RS='^$' -v ORS= '{sub(/(\r?\n)+$/,"\n")}1' file | cat -v
1与其他鹰:
$ awk '{rec = rec $0 RS} END{sub(/(\r?\n)+$/,"\n",rec); printf "%s",rec}' file | cat -v
1无论行尾是DOS还是UNIX,上述内容都可以工作。
发布于 2015-12-13 18:05:43
你能用这样的tr吗?
tr -d '\r\n' < file1 > tempfile && mv tempfile file1这将翻译file1并删除\r\n。
https://stackoverflow.com/questions/34254372
复制相似问题