linux – 编辑巨大的sql数据文件
我有一个23GB的文件,我想编辑第23行,但我在服务器上只有200 MB RAM.我不想完全打开文件,因为我只留下了20GB的可用磁盘空间.
我怎样才能做到这一点.我试图使用head,tail sed但它似乎创建了一个临时文件.没有临时文件可以做到吗? 解决方法
解决方案是使用十六进制编辑器编辑文件. Hex编辑器用于处理大型文件,甚至是整个磁盘和分区.
您可能会发现hexedit(基于ncurses)或ghex(基于Gnome / Gtk)非常有用.它们是常用的实用程序,因此您很可能会在发行版的repo中找到它们. 我使用过的所有十六进制编辑器都使用双面板视图,左侧面板以十六进制显示文件的字节,右侧面板尝试在可能的情况下显示Ascii表示. 为了查找和编辑您的第23行: sed -n’23p’my_huge_dump.sql:将打印此行的内容 或者使用less -N my_huge_dump.sql打开文件并查看第23行的内容.(-N in less enable行编号) 现在,知道第23行的内容: >如果此行的文本有些独特且与周围的行不同,您可以从右侧(ascii)面板中找到它并使用箭头导航到此行.在hexedit中,使用Tab键在Hex和Ascii面板之间移动.在gHex中,您也可以使用鼠标.您也可以搜索您感兴趣的字符串:移动到Ascii面板并按/十六进制中的/或使用gHex中的菜单. 然后假设您找到了要编辑的行,您有以下选项: >希望第23行的新内容的长度与现有内容相比更短或相等(因此您不需要增长和移动整个文件).在这种情况下,您必须进入填充模式,即您覆盖旧文本的现有内容的模式.这是gHex和hexedit中的默认模式.移动到要编辑的位置并开始输入.按Backspace将撤消您的更改.如果新内容比现有内容短,则可以用空格填充该行以避免截断文件. 在第一种情况下,保证文件的编辑和保存将是即时的,因为将进行就地编辑.在后一种情况下,我不确定如何处理大小的增长和后续字节的移动,但我希望文件系统使用更大的非连续块来移动一些内容而不是移动整个文件. 如果您对更改感到满意,请保存文件: >使用gHex中的菜单 始终确保备份到位! 编辑:我发现gHex不适合你的情况,因为它试图将整个文件加载到内存中. hexedit会很好.但是,如果您需要像gHex这样的图形编辑器,但具有部分文件加载功能,则可以尝试wxHexEditor.另请查看Wikipedia中的Comparison of Hex editors页面. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |