我有一个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完全完成文件?
答案 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