2015-07-09 71 views
0

我有一个巨大的文件,大约10 MB,它有大约175,000行。我试着像这样截断它:如何删除“.data”文件中的行?

sed '500,175000d' <file-name.data> 

我重新打开文件,所有的行仍然存在!我测试了这个与其他文件,它的工作原理。由于某些原因,.data扩展名不起作用?我如何删除这些行?

+3

忘了'-i'? – Wintermute

+0

奇怪的是,他们没有提及[这里](http://www.folkstalk.com/2012/06/delete-range-of-lines-unix-linux.html)谢谢 – Hunle

+0

其实你需要'sed -i .bak ....' – Hunle

回答

1

您需要可以输出重定向到一个新的文件中像

sed '500,175000d' file-name.data >newFile 

或使用替代选项编辑其重写输入文件

sed -i '500,175000d' file-name.data 

由Wintermute

指出

编辑:

更快的sed将只是

sed -i '500q' file-name.data # prints 1-500 and quits after line 500 
+0

您提到的“更快”的sed:如果我执行'sed -i'500q'文件名',那么它会给我一个错误:'命令末尾的文件名额外字符'。而且,如果我执行'sed -i.bak'500q'file-name',那么它不会抛出错误,但它根本不会更改文件。我的操作系统是Darwin Kernel版本14.3.0。 – Hunle

+0

有两个sed(或更多)的实现,看看这个[post](http://stackoverflow.com/questions/4247068/sed-command-failing-on-mac-but-works-on-linux)。另外,在-i和.bak之间应该有一个空格 – Tom