您有任何 bash 解决方案可以从标准输出中删除 N 行吗?
像“head”命令一样,打印所有行,仅最后 N 行除外
bash 上的简单解决方案:
找到 ./test_dir/ | sed '$d' | sed '$d' | sed '$d' | ...
但我需要复制 sed 命令 N 次
有更好的解决方案吗?除了 awk、python 等...
head
与负数一起使用。在我的示例中,它将打印除最后 3 行之外的所有行:
head -n -3 infile
如果 head -n -3 文件名在您的系统上不起作用(如我的),您也可以尝试以下方法(并且可能为它取别名或在您的 .bashrc 中创建一个函数)
head -`echo "$(wc -l filename)" | awk '{ print $1 - 3; }'` filename
其中filename和3以上分别是您的文件和行数。
该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