0

您有任何 bash 解决方案可以从标准输出中删除 N 行吗?

像“head”命令一样,打印所有行,仅最后 N 行除外

bash 上的简单解决方案:

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

但我需要复制 sed 命令 N 次

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

4

3 回答 3

5

head与负数一起使用。在我的示例中,它将打印除最后 3 行之外的所有行:

head -n -3 infile
于 2012-08-31T09:02:18.237 回答
1

如果 head -n -3 文件名在您的系统上不起作用(如我的),您也可以尝试以下方法(并且可能为它取别名或在您的 .bashrc 中创建一个函数)

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

其中filename3以上分别是您的文件和行数。

于 2015-06-25T06:14:57.757 回答
1

tail命令可以从 Mac OS / BSD 上的文件末尾跳过。tail接受+/-前缀,这有利于下面的表达,它将从开头显示 3 行

tail -n +3 filename.ext

或者,要从文件末尾跳过行,请改用-前缀。

tail -n -3 filenme.ext

通常,默认为tail前缀-,因此从文件末尾开始计数。在此处查看对不同问题的类似答案: Print a file skipping first X lines in Bash

于 2018-10-11T04:42:05.733 回答