首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sed操作只适用于较小的文件。

Sed操作只适用于较小的文件。
EN

Stack Overflow用户
提问于 2016-03-07 12:15:08
回答 1查看 72关注 0票数 0

操作系统: Ubuntu 14.04

我有12个大的json文件(每个文件2-4GB),我想对它们执行不同的操作。我希望删除第一行,查找"}“,并将其替换为"}”并删除所有"]“。

我使用sed执行操作,我的命令是:

代码语言:javascript
复制
sed -i.bak -e '1d' -e 's/},/}/g' -e '/]/d' file.json

当我在一个小文件(12,7kb)上运行命令时,它可以正常工作。file.json包含更改的内容,file.json.bak包含原始内容。

但是,当我在较大的文件上运行命令时,原始文件将被清空,例如,file.json为空,file.json.bak包含原始内容。运行时间也是我认为是“快”的,大约2-3秒。

我在这里做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-07 14:02:29

您确定输入文件包含由运行命令的平台识别的换行符吗?如果没有,那么删除一行将删除整个文件。wc -l < file告诉你什么了?

如果不是这样,那么您可能没有足够的文件空间来复制该文件,因此sed在内部执行类似的操作

代码语言:javascript
复制
mv file backup && sed '...' backup > file

但在将原始文件移动到备份后,没有创建新文件的空间。检查可用的文件空间,如果您没有足够的文件空间,并且无法获得更多的文件空间,则需要执行以下操作:

代码语言:javascript
复制
while [ -s oldfile ]
do
    copy first N bytes of oldfile into tmpfile &&
    remove first N bytes from oldfile using real inplace editing &&
    sed 'script' tmpfile >> newfile &&
    rm -f tmpfile
done
mv newfile oldfile

有关如何从文件中删除第一个N个字节,请参见https://stackoverflow.com/a/17331179/1745001。选择适合您可用空间的N的最大值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35843515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档