在很长的行上搜索和替换的 Sed 替代方案

Tom*_*ing 9 sed

我的文件是由没有在记录末尾放置换行符的程序生成的。我想在记录之间添加换行符,我可以用一个简单的 sed 脚本来做到这一点:

sed -e 's/}{/}\n{/g'
Run Code Online (Sandbox Code Playgroud)

问题在于输入文件的大小为数 GB,因此 sed 的输入行的长度为数 GB。sed 尝试在内存中保留一行,在这种情况下不起作用。我尝试了该--unbuffered选项,但这似乎使它变慢并且无法正确完成。

ter*_*don 7

您可以使用其他工具来设置输入记录分隔符。例如

  • 珀尔

    perl -pe 'BEGIN{ $/="}{" } s/}{/}\n{/g' file
    
    Run Code Online (Sandbox Code Playgroud)

    特殊变量$/是输入记录分隔符。将其设置为}{将行定义为以}{. 这样您就可以实现您想要的,而无需将整个内容读入内存。

  • mawk 或 gawk

    awk -v RS="}{" -vORS= 'NR > 1 {print "}\n{"}; {print}' file 
    
    Run Code Online (Sandbox Code Playgroud)

    这是同样的想法。RS="}{"将记录分隔符设置为}{,然后打印}一个换行符{(第一条记录除外)和当前记录。