这是使用GNU sed版本4.2.1,但到目前为止我还尝试过awk和Perl没有任何成功。
我有一个由COBOL程序(在Linux上)生成的文件,它有可以被认为是非标准的CRLF而不是LF(CRLF当然是Windows行终止符),但这是我需要保留的 - 任何CRLF保留
所以\r\n
序列停留。
我需要替换的是偶然的\r\n\n
序列\r\n\r\n
而不会打扰其他任何内容。
我必须将我使用diff生成的文件与BSD或SCO上生成的原始文件相匹配。
这不起作用,我希望第一个/n
被Sed
剥离为行终止符
sed -e 's/\r\n\n/\r\n\r\n/g' infile > outfile
我尝试了hex 0x
并且也是双重逃避
感谢您的任何建议
答案 0 :(得分:2)
我建议您在任何前面没有一个LF之前添加一个CR。
s/ (?<!\r) (?=\n) /\r/xg
在改变文件中数据的程序中,它看起来像这样
use strict;
use warnings;
use open IO => ':raw';
my $data = do {
local $/;
<>;
};
$data =~ s/ (?<!\r) (?=\n) /\r/xg;
print $data;
你会像
一样运行它perl add_cr.pl myfile > newfile
或者,如果您想要就地修改文件(在测试之后),您只需使用
perl -i add_cr.pl myfile
答案 1 :(得分:2)
作为面向行的工具,blah\r\n\n
将是一行blah\r
,后面跟一个空行。因此,将\r
添加到任何空行:
sed 's/^$/\r/' infile > outfile
答案 2 :(得分:0)
只需使用这个Perl one-liner:
perl -pe "s/\R/\r\n/g" <input.txt >output.txt
此处的Magic大约是\R
,它与Perl接受的任何新行组合相匹配:\n
,\r\n
或\r
。据我所知,\R
仅限Perl - sed
或awk
不支持。
答案 3 :(得分:0)
用于多字符RS的GNU awk:
awk -v RS='\r\n\n' -v ORS='\r\n\r\n' '1' file
答案 4 :(得分:0)
尝试unix2dos实用程序:它处理所有unix / dos /和unix / dos情况的混合。 注意:dos2unix也是一个很好的实用程序。
覆盖:
unix2dos your-file
创建新文件:
unix2dos < your-file > your-new-file