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

在unix shell中删除非常大的文件的前n个字符,shell,unix,sed,Shell,Unix,Sed,我有一个大的文本文件(~3GB)。 在创建它时,我犯了一个错误,只有第一行的前几个(不是全部)字符是错误的。第一行中的其余字符是正确的。所有其他行也都是正确的。我的问题很简单,就是: 如何删除如此大文件的前n个字符我不想删除整个第一行,只删除前n个字符。我的要求是: 不更换所有剩余的线路 没有读取整个文件 理想情况下,使用unixshell命令 我尝试过sed,但它会替换第一行并复制所有其他行。。。也许我可以使用“退出”选项? 当然,我可以再次创建该文件,而不会出错…您可以使用: sed -i.

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

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

  • 不更换所有剩余的线路
  • 没有读取整个文件
  • 理想情况下,使用unixshell命令
  • 我尝试过sed,但它会替换第一行并复制所有其他行。。。也许我可以使用“退出”选项? 当然,我可以再次创建该文件,而不会出错…

    您可以使用:

    sed -i.bak -r '1s/^.{10}//' file
    
    这将创建一个备份
    文件.bak
    ,并从第一行中删除前10个字符。注
    -i
    也可以单独使用,在不备份的情况下进行就地编辑

    试验 原始文件:

    $ cat a
    1234567890some bad data and here we are
    blablabla
    yeah
    
    让我们:

    $ 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
    

    可能是@CiroSantilli的复制品这是什么复制品???我不想删除第一行…相关:摘要:从文件开头删除数据而不修改其余部分是很困难的。如果你担心有足够的眼睛看到这一点并提供一个好的答案,你可以等几天,然后悬赏。反复编辑不会有多大帮助。@fedorqui我就等几个小时。我编辑这个问题不是为了得到更好的答案,只是为了让它更清楚,以备将来参考:)+1个好答案,谢谢。但是,它会删除前10个字符,然后复制文件的其余部分。您也可以像这样删除第一行中的这些字符:
    sed-r'1{s/^.{10}/;q}'file>new_file
    ,这会重定向到另一个文件。然后用
    tail-n+2文件>>新文件
    获取第二行的所有内容,最后用
    mv新文件
    替换原来的文件。好吧,我不认为有这样的事情。请注意,从文件开头删除内容意味着移动文件的其余部分。@vefthym无论您使用MS Word还是vi editor,如果从开头删除一些字符,随后的字符将自动移动到前面。你们都是对的,我问题中关于编辑器的要点与此无关。所以,如果没有办法做到我想要的,我想@fedorqui的答案是我能得到的最好答案。