如何使用Shell命令删除ascii文件的前n行?


92

我在前5-10行中包含多个包含ascii文本信息的文件,其后是格式良好的矩阵信息。在shell脚本中,我想删除文本的前几行,以便可以在另一个程序中使用纯矩阵信息。如何使用bash shell命令执行此操作?

如果有帮助,我正在使用RedHat和Ubuntu Linux系统。

Answers:


143

只要文件不是符号链接或硬链接,就可以使用sed,tail或awk。下面的例子。

$ cat t.txt
12
34
56
78
90

sed

$ sed -e '1,3d' < t.txt
78
90

您也可以在没有临时文件的情况下就地使用sed sed -i -e 1,3d yourfile。这不会回显任何内容,只会在适当位置修改文件。如果您不需要将结果通过管道传递到另一个命令,这将更加容易。

尾巴

$ tail -n +4 t.txt
78
90

awk

$ awk 'NR > 3 { print }' < t.txt
78
90

8
您也可以在没有临时文件的情况下就地使用sed sed -i -e 1,3d yourfile。这不会回显任何内容,只会在适当位置修改文件。如果您不需要将结果通过管道传递到另一个命令,这将更加容易。
Yanick Girouard

1
感谢@ YanickGirouard,@ IgnacioVazquezAbrams!你们两个刚刚为我节省了很多研究工作!:)
保罗

2
@Svetlana sed -i特别。大多数实现只是删除文件并用一个新文件代替,这对链接不起作用,因为您最终将原始文件留在了其他位置。
jw013 2014年

6
如何解释“ 1,3d”,+ 4等。手段?问题是n行,但您没有告诉我们n是多少(在您的示例中n显然为2,尽管对于
菜鸟来说

3
这使用了一个临时文件,因此对于100%的使用磁盘空间不是很有用。有一个解决方案可以按字面意义“就地”执行此操作将很有趣。
Shai 2016年

10

sed -i '1,3d' file.txt

这将从file.txt中删除前3行。


6

如果列表行是具有制表符的行:

grep '␉' <input_file >output_file

是文字的制表符)或等效地

sed -n '/␉/p' <input_file >output_file

在bash / ksh / zsh脚本中,您可以编写$'\t'选项卡,例如grep $'\t'sed -n $'/\t/p'

如果要消除文件开头的10行:

tail -n +11 <input_file >output_file

(请注意,+11要删除10行,因为这+11意味着“从第11行开始”而尾数从1开始)或

sed '1,10d' <input_file >output_file

在Linux上,您可以利用GNU sed的-i选项来修改文件:

sed -i -n '/\t/p' *.txt

或者,您可以使用Shell循环和临时文件:

for x in *.txt; do
  tail -n +11 <"$x" >"$x.tmp"
  mv "$x.tmp" "$x"
done

或者,如果您不想就地修改文件,而是给它们改一个名称:

for x in *.txt; do
  tail -n +11 <"$x" >"${x%.txt}.data"
done

3
“制表”通常是指“漂亮地打印在表中”,而不是“缩进制表符”。
伊格纳西奥·巴斯克斯

我知道@ IgnacioVazquez-Abrams。打印精美的表有时使用制表符,比对齐的列更容易发现。当然,如果Paul提供了示例输入,我可以提供更好的匹配器。
吉尔斯

2

您可以在Ex模式下使用Vim:

ex -sc '1d5|x' file
  1. 1 移至第一行

  2. 5 选择5行

  3. d 删除

  4. x 保存并关闭


0

回声“ a \ nb” | sed'1d'#删除第一行

猫list.txt | sed'1d'> list.csv#读取list.txt并写入list.csv,不带第一行

其他有用的命令:

grep'^ |' #查找第一个字符(pipe |)

sed's / | // g'#删除管道

sed's / // g'#删除空间


0

按百分比

使用bash,使用百分比数字而不是绝对行数来清理文件:

sed -i -e 1,$( printf  "$((`cat php_errors.log | wc -l` * 75 /100 ))" )d php_errors.log

请注意,因为该命令会在不创建副本的情况下就地删除其内容,因此具有破坏性。

它从提到的文件中删除前75%的行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.