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