如果有帮助,我正在使用RedHat和Ubuntu Linux系统。
#1 楼
只要文件不是符号链接或硬链接,就可以使用sed,tail或awk。下面的例子。 :sed -i -e 1,3d yourfile
。这不会回显任何内容,只会在适当位置修改文件。如果不需要将结果通过管道传递到另一个命令,则更容易。 br /> $ cat t.txt
12
34
56
78
90
#2 楼
sed -i '1,3d' file.txt
这将从file.txt中删除前3行。
评论
我需要从10GB以上的文本文件中删除前50行。即使应该“就地”运行,该命令仍然需要几分钟。有没有真正快速的选择?
–塞巴斯蒂安
19-10-25在8:09
@Sébastien如果只需要删除前50行,请在文本编辑器中打开文件,选择前50行并删除它们?用此命令删除7GB +文本文件的8 473 386第一行花了17秒,我不得不承认我发现它非常快。
– smonff
20年4月6日在9:13
#3 楼
如果列表行是带有制表符的行: br />在bash / ksh / zsh脚本中,您可以为标签页编写
␉
,例如$'\t'
或grep $'\t'
。如果要在文件开头消除10行: 10行,因为
sed -n $'/\t/p'
的意思是“从第11行开始”,尾号从1开始的行)或修改文件到位:
grep '␉' <input_file >output_file
或者您可以使用shell循环和临时文件:
sed -n '/␉/p' <input_file >output_file
或者,如果您不想就地修改文件,而是给它们改一个名称:
tail -n +11 <input_file >output_file
评论
“制表”通常是指“漂亮地打印在表中”,而不是“缩进制表符”。
–伊格纳西奥·巴斯克斯(Ignacio Vazquez-Abrams)
2012年5月3日,2:14
我知道@ IgnacioVazquez-Abrams。打印精美的表有时使用制表符,比对齐的列更容易发现。当然,如果Paul提供了示例输入,我可以提供更好的匹配器。
–吉尔斯'所以-不再是邪恶的'
2012年5月3日在10:04
#4 楼
您可以在Ex模式下使用Vim: ex -sc '1d5|x' file
1
移至第一行5
选择5行d
删除x
保存并关闭#5 楼
按百分比使用
bash
,使用百分比数字而不是绝对行数来清理文件: sed -i -e 1,$( printf "$((`cat php_errors.log | wc -l` * 75 /100 ))" )d php_errors.log
请注意,因为该命令可能会破坏性,因为它会在不创建副本的情况下就地删除内容。
它将删除前75%的内容。提到文件中的行。
#6 楼
# deletes first line
echo "a\nb" | sed '1d'
# read list.txt and write list.csv without first line
cat list.txt | sed '1d' > list.csv
其他有用的命令:
# finds first character (pipe|)
grep '^|'
# deletes pipe
sed 's/|//g'
# deletes space
sed 's/ //g'
评论
您也可以在没有临时文件的情况下就位使用sed:sed -i -e 1,3d yourfile。这不会回显任何内容,只会在适当位置修改文件。如果您不需要将结果通过管道传递到另一个命令,则这会更容易。
– Yanick Girouard
2012年5月2日23:46
感谢@ YanickGirouard,@ IgnacioVazquezAbrams!你们两个刚刚为我节省了很多研究工作! :)
– Paul
2012年9月6日下午5:22
@Svetlana sed -i特别是。大多数实现只是删除文件并用一个新文件代替,这对链接不起作用,因为最终将原始文件留在其他位置。
– jw013
2014年1月7日22:21
如何解释“ 1,3d”,+ 4等。手段?问题是n行,但您没有告诉n是什么(在示例中n显然是2,尽管对于noob来说要更改n改变什么并不明显)
–罗宾·马诺利(Robin Manoli)
2015年2月1日在10:29
这使用了一个临时文件,因此对于100%的使用磁盘空间不是很有用。有一种解决方案可以按字面上“就地”执行此操作将很有趣。
–上海
16年9月2日在21:09