【问题标题】:Omitting the first line from any Linux command output省略任何 Linux 命令输出的第一行
【发布时间】:2011-11-11 05:19:03
【问题描述】:

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

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

【问题讨论】:

    标签: linux


    【解决方案1】:

    这是一种快速的 hacky 方式:ls -lart | grep -v ^total

    基本上,删除所有以“total”开头的行,这在ls 输出中应该只是第一行。

    一种更通用的方式(适用于任何事物):

    ls -lart | sed "1 d"

    sed "1 d" 表示只打印除第一行以外的所有内容。

    【讨论】:

    • 使用grep 过滤这个任务通常是危险的;它可能会意外匹配。
    • 有时是的,我认为这不是最好的解决方案......但是 ls 命令总是引导具有目录权限的条目。这并不理想,因为 grep 会继续检查每一行,并且 ls 与其他标志的行为不同。
    • 这只是语义,但从技术上讲,它意味着从流中删除第一行。
    • 希望你没有想要知道的以total 为名的i 文件
    【解决方案2】:

    将其发送至awk:

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

    sed

    sed -n '1!p'
    

    【讨论】:

    • 还有sed '1d'
    【解决方案3】:

    tail 程序可以做到这一点:

    ls -lart | tail -n +2
    

    -n +2 的意思是“从输出的第二行开始通过”。

    【讨论】:

    • 请注意,某些tail 实现需要-n 标志,如tail -n +2
    • 你也可以使用find . -name . -o -ls -prune,但这会产生一些不同的输出。
    • @Mat:看起来是这样,虽然我尝试(在 OSX 上)时它没有工作。
    • 它曾经与 coreutils tail 一起工作,但它已被弃用,然后被删除。你现在得到tail: cannot open '+2' for reading: No such file or directory(coreutils 8.7)。可悲的是其他实现不接受-n...
    • @Mat:有些人需要,有些人不接受?啊!呜呜呜呜!真恶心。
    【解决方案4】:
    ls -lart | tail -n +2 #argument means starting with line 2
    

    【讨论】:

      【解决方案5】:

      只需添加到输出中:sed /^total/d

      例如:ls -l | sed /^total/d

      【讨论】:

        猜你喜欢
        • 2013-12-05
        • 1970-01-01
        • 2013-10-12
        • 2018-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多