Linux Shell中用SED编辑大文件头部

分享LinuxShellSED by 达达 at 2011-06-15

游戏运维的时候遇到这样一个情况:游戏服跟数据库服网络不通的时候,游戏服进入非同步状态,这时候会将游戏的数据变更都写入一个日志文件,游戏还照常在运行,因为游戏的数据变更是非常快的,所以这个日志文件增长很快,有时候发现的时候文件已经几百兆甚至上G。这个日志文件头部会带有进入异常状态的原因,那个不是合法的SQL语句,所以要把日志文件变成合法的SQL语句还得把文件头部的几行错误信息删除,有时候还需要根据错误情况把头几行SQL删除。

像这种情况vim或者别的编辑器明显没办法应对。在实践过程中找到了用sed编辑大文件头部的方法,这里分享下经验也顺便自己做下记录。

删除文件头部指定几行(例子中指定删除1-8行):

sed -ine "1,8d" data.log

使用-n参数是防止sed把整个文件从头打印一遍到shell。

在文件头部添加内容(例子中在第一行插入“set names utf8;”):

sed -ine '1iset names utf8;' data.log