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

vef*_*hym 4 unix shell sed

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

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

  1. 不替换所有剩余的行。
  2. 无需阅读整个文件。
  3. 理想情况下,使用 unix shell 命令。

我试过 sed,但它替换了第一行并复制了所有其余的行……也许我可以使用“退出”选项?当然,我可以再次创建文件,而不会犯那个错误......

fed*_*qui 5

您可以使用:

sed -i.bak -r '1s/^.{10}//' file
Run Code Online (Sandbox Code Playgroud)

这将创建一个备份file.bak并删除第一行的前 10 个字符。-i也可以单独使用Note ,在没有备份的情况下进行就地编辑。

测试

原始文件:

$ cat a
1234567890some bad data and here we are
blablabla
yeah
Run Code Online (Sandbox Code Playgroud)

让我们:

$ 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
Run Code Online (Sandbox Code Playgroud)