在bash上从STDOUT中删除n行

时间:2012-08-31 08:55:56

标签: bash sed tail unix-head

你有任何bash解决方案从stdout删除N行吗?

像'head'命令一样,打印所有行,只有最后一行

关于bash的简单解决:

  

找到./test_dir/ | sed'$ d'| sed'$ d'| sed'$ d'| ...

但我需要复制sed命令N次

有更好的解决方案吗? 除了awk,python等...

3 个答案:

答案 0 :(得分:5)

使用带有负数的head。在我的例子中,它将打印所有行但是最后3行:

head -n -3 infile

答案 1 :(得分:1)

如果head -n -3文件名在你的系统上不起作用(比如我的),你也可以尝试以下方法(也许是别名或在.bashrc中创建一个函数)

head -`echo "$(wc -l filename)" | awk '{ print $1 - 3; }'` filename

上面的 filename 3 分别是你的文件和行数。

答案 2 :(得分:0)

在Mac OS / BSD上,tail可以从末尾跳过。 tail接受数字前面的+/-,以便您可以写tail -n +3 filename.ext从文件开头跳过3或tail -n -3 filenme.ext跳过从文件末尾开始计数的行通常是tail -n的默认值。在这里看到不同问题的类似答案:Print a file skipping first X lines in Bash