Sed命令不完全解析输入文件

时间:2015-10-30 11:42:20

标签: bash unix sed

我有一个5.1GB文件,这是一行文字,没有换行符。

我已获得以下命令,可在每{...}后附加一个换行符:

's/{[^}]*}/&\n/g' input > output.txt

这可以按预期工作,但是它没有完全完成,它也不会向控制台抛出错误消息。

它未完成的原因是因为output.txt总是1.1GB所以我错过了~3.9GB数据。

我还尝试过内联sed -i 's/{[^}]*}/&\n/g' input,它也生成1.1GB个文件。

sed是否仅限于特定的输出尺寸?我找不到类似的用例。

此外,我尝试使用tr确实产生了完整的输出大小,但似乎你不能用tr命令用1替换多个字符。这不起作用:

tr '}' '}\n' < input > output.txt

有没有办法让sed完全完成文件?

2 个答案:

答案 0 :(得分:1)

Perl怎么样?

perl -e '$/ = "}"; print "$_\n" while <>' input > output.txt
  • $/是输入记录分隔符。
  • <>是菱形运算符 - 它从输入文件中读取由$/分隔的块。
  • $_是主题变量,由while <>填充。

答案 1 :(得分:0)

尝试为无缓冲的

选项-u
sed -u 's/{[^}]*}/&\n/g' input > output.txt

sed -u 's/{[^}]*}/&\n/;P;D' input > output.txt