忽略Linux命令输出中的第一行

248
我有一个需求,想要从ls -latr "一些路径"的输出中省略第一行。因为我需要删除下面输出中的total 136

enter image description here

所以我写了ls -latr /home/kjatin1/DT_901_linux//autoInclude/system | tail -q,它排除了第一行,但当文件夹为空时,它不会省略第一行。请告诉我如何在任何Linux命令输出中省略第一行。

5个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
403

tail 命令可以实现这个功能:

ls -lart | tail -n +2

-n +2 的意思是“从输出的第二行开始逐行处理”。


1
请注意,某些 tail 实现需要 -n 标志,例如 tail -n +2 - Mat
1
你也可以使用 find . -name . -o -ls -prune,但它会产生略微不同的输出。 - Donal Fellows
@Mat:看起来是这样,尽管我在OSX上尝试时没有使用也可以工作。 - Donal Fellows
1
它曾经可以使用 coreutils 的 tail 命令,但现在已被弃用并删除。现在你会得到 tail: cannot open '+2' for reading: No such file or directory(coreutils 8.7)。可悲的是其他实现不接受 -n... - Mat
4
@Mat: 有些人需要它,而另一些人则不会接受?噫!噫噫噫噫!太恶心了。 - Donal Fellows
是的,这很遗憾。虽然在现代系统上使用“-n”基本上还好。但Solaris(<=10?)可能仍然存在问题。 - Mat

230

使用管道将其传递给 awk

    awk '{if(NR>1)print}'

或者 sed

    sed -n '1!p'

50
也可以使用 sed '1d' - JoL

32
    ls -lart | tail -n +2 #argument means starting with line 2

24

这是一种快速而简单的方法:ls -lart | grep -v ^total

基本上,删除任何以"total"开头的行,而在ls输出中,它应该只是第一行。

一个更通用的方法(适用于任何内容):

ls -lart | sed "1 d"

sed "1 d" 意味着只打印除了第一行之外的所有内容。


4
通常情况下,使用grep来进行过滤是很危险的,因为它可能会意外地匹配到其他内容。 - Donal Fellows
有时候是这样,我认为这不是最好的解决方案...但是ls命令总是以目录权限为前导项。这并不理想,因为grep继续检查每一行,而ls在使用其他标志时的行为也不同。 - Jeff Ferland
2
这只是语义学上的问题,但从技术上讲,它意味着从流中删除第一行。 - John Morales
1
希望你没有一个文件名中包含“total”的i文件,而你想了解它的情况。 - Amias

5

您可以使用awk命令:

对于命令输出,请使用管道:| awk 'NR>1'

对于文件输出,请使用:awk 'NR>1' file.csv


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,