在unix shell中删除一个非常大的文件的前n个字符

时间:2014-10-16 08:53:20

标签: shell unix sed

我有一个大文本文件(~3GB)。 创建它时,我犯了一个错误,只有第一行的前几个(并非所有)字符 是错误的。第一行中的其余字符是正确的。所有其他行也是正确的。我的非常简单的问题是:

如何删除这么大文件的前n个字符? 我不想删除整个第一行,只删除前n个字符。我的要求是:

  1. 不替换所有剩余的行。
  2. 不读取整个文件。
  3. 理想情况下,使用unix shell命令。
  4. 我已经尝试了sed,但这取代了第一行并复制了所有其余的...也许我可以使用“退出”选项? 当然,我可以再次创建文件,而不会犯这个错误......

1 个答案:

答案 0 :(得分:3)

您可以使用:

sed -i.bak -r '1s/^.{10}//' file

这将创建备份file.bak并从第一行中删除前10个字符。也可以单独使用-i进行就地编辑,无需备份。

测试

原始档案:

$ cat a
1234567890some bad data and here we are
blablabla
yeah

让' S:

$ sed -i.bak -r '1s/^.{10}//' a
$ cat a
some bad data and here we are
blablabla
yeah
$ cat a.bak 
1234567890some bad data and here we are
blablabla
yeah