gpt4 book ai didi

linux - 编辑巨大的sql数据文件

转载 作者:IT王子 更新时间:2023-10-29 00:40:38 26 4
gpt4 key购买 nike

我有一个 23GB 的文件,我想编辑第 23 行,但服务器上只有 200 MB 可用内存。我不想完全打开文件,因为我只剩下 20GB 的可用磁盘空间。

我该怎么做。我尝试使用 head, tail sed 但它似乎创建了一个临时文件。没有临时文件是否可以做到这一点?

最佳答案

解决方案是使用十六进制编辑器编辑文件。十六进制编辑器旨在处理大文件,甚至是整个磁盘和分区。

您可能会发现 hexedit (基于 ncurses)或 ghex (基于 Gnome/Gtk)很有用。它们是常用的实用程序,因此您很可能会在发行版的存储库中找到它们。

我使用过的所有十六进制编辑器都使用双面板 View ,左侧面板以十六进制显示文件的字节,右侧面板尽可能显示 Ascii 表示形式。

为了找到并编辑您的第 23 行:

sed -n '23p' my_huge_dump.sql : 将打印这一行的内容
sed -n '23p' my_huge_dump.sql | od -A n -t x1 : 将以十六进制格式打印这一行的内容。

或者用less -N my_huge_dump.sql打开文件并查看第23行的内容。(-N in less enables line编号)

现在,知道第23行的内容:

  • 如果该行的文本有些独特并且与周围的行不同,您可以从右侧 (ascii) 面板找到它并使用箭头导航到该行。在 hexedit 中,您可以使用 Tab 键在十六进制和 Ascii 面板之间移动。在 gHex 中,您也可以使用鼠标。您也可以搜索您感兴趣的字符串:移动到 Ascii 面板并在 hexedit 中按 / 或使用 gHex 中的菜单。
  • 如果你要编辑的行与其他行的内容相似,而你在ascii面板中找不到它,那么你必须计算“换行”分隔符才能找到第23行。新行 (LF) 以十六进制表示为 0A。在 ASCII 面板中,新行表示为点

然后假设您找到了要编辑的行,您有以下选项:

  • 希望第 23 行的新内容比现有内容更短或相同(这样您就不需要增大和移动整个文件)。在这种情况下,您必须进入 Fill-mode,即在旧文本上覆盖现有内容的模式。这是 gHexhexedit 中的默认模式。移动到您要编辑的位置并开始键入。按 Backspace 将撤消您的更改。如果新内容比现有内容短,您可以用空格填充该行以避免截断文件。
  • 如果新内容比这一行中的现有内容长,则必须进入Insert 模式。您可以使用 gHex 中的菜单来做到这一点。在 hexedit 中,您必须使用 EscI 键绑定(bind)。然后开始键入,新字符将附加到当前位置。

在第一种情况下,可以保证文件的编辑和保存是即时的,因为会发生就地编辑。在后一种情况下,我不确定如何处理大小的增长和后续字节的移动,但我希望文件系统使用更大的非连续 block 来移动一些内容而不是移动整个文件。

如果您对更改感到满意,请保存文件:

  • 使用 gHex 中的菜单
  • hexedit 中使用 Ctrlx 并在询问是否保存更改时回答 (Y)es .

始终确保您有备份!

编辑:我发现 gHex 不适合您的情况,因为它试图将整个文件加载到内存中。 hexedit 将为您服务。但是,如果您想要像 gHex 这样的图形编辑器,但具有部分文件加载功能,您可以尝试 wxHexEditor .还要检查 Comparison of Hex editors维基百科中的页面。

关于linux - 编辑巨大的sql数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30727191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com