簡體   English   中英

sed操作僅適用於較小的文件

[英]Sed operations only works with smaller files

操作系統:Ubuntu 14.04

我有12個大型json文件(每個2-4 GB),我想對其執行不同的操作。 我要刪除第一行,找到“}”,然后將其替換為“}”,然后刪除所有“]”。

我正在使用sed進行操作,我的命令是:

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秒。

我在這里做錯了什么?

您確定輸入文件包含換行符,而換行符被您在其上運行命令的平台所識別? 如果沒有,則刪除一行將刪除整個文件。 wc -l < file告訴您什么?

如果不是這樣,那么您可能沒有足夠的文件空間來復制文件,因此sed在內部進行了類似的操作

mv file backup && sed '...' backup > file

但在將原始文件移至備份后沒有空間來創建新文件。 檢查可用的文件空間,如果您沒有足夠的空間並且無法獲得更多空間,則需要執行以下操作:

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的最大值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM