【问题标题】:How do I get a part of the output of a command in Linux Bash?如何在 Linux Bash 中获取命令输出的一部分?
【发布时间】:2014-09-26 19:11:05
【问题描述】:

如何在 Bash 中获取命令输出的一部分?

例如,命令php -v 输出:

PHP 5.3.28 (cli) (built: Jun 23 2014 16:25:09)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies with the ionCube PHP Loader v4.6.1, Copyright (c) 2002-2014, by ionCube Ltd.

我只想输出PHP 5.3.28 (cli) 部分。我该怎么做?

我试过php -v | grep 'PHP 5.3.28',但输出:PHP 5.3.28 (cli) (built: Jun 23 2014 16:25:09),这不是我想要的。

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    你可以试试下面的AWK 命令,

    $ php -v | awk 'NR==1{print $1,$2,$3}'
    PHP 5.3.28 (cli)
    

    它打印第一行输入的前三列。

    • NR==1(条件)即,仅当NR变量的值为1时才执行{}内的语句。
    • {print $1,$2,$3} 打印 col1,col2,col3。打印语句中的, 表示OFS(输出字段分隔符)。

    【讨论】:

    • 它有效,但我不明白你在做什么。你能解释一下吗?
    • 哦,等等,我现在明白了! :) 非常感谢..!
    【解决方案2】:

    在纯 Bash 中你可以做到

    echo 'PHP 5.3.28 (cli) (built: Jun 23 2014 16:25:09)' | cut -d '(' -f 1,2
    

    输出:

    PHP 5.3.28 (cli)
    

    或者使用空格作为分隔符:

    echo 'PHP 5.3.28 (cli) (built: Jun 23 2014 16:25:09)' | cut -d ' ' -f 1,2,3
    

    【讨论】:

      【解决方案3】:

      如果您想要所有包含“php”的行,请执行以下操作:

       $ php -v | grep -i "php"
      

      然后,如果您想要其中的前三个单词,您可以按照@Avinash 的建议添加另一个管道:

      $ php -v | grep -i "php" | awk 'NR==1{print $1,$2,$3}'
      

      【讨论】:

        【解决方案4】:

        一个经典的“给猫剥皮的百万种方法”问题......

        这些方法似乎按空格过滤...如果版本/注释包含空格,则此操作失败。

        不过,( 括号在我的所有平台上似乎都是一致的,因此我使用了以下内容:

        例如,Debian:

        root@host:~# php -v  | head -1
        PHP 5.3.28-1~dotdeb.0 with Suhosin-Patch (cli) (built: Dec 13 2013 01:38:56)
        root@host:~# php -v  | head -1 | cut -d " " -f 1-2
        PHP 5.3.28-1~dotdeb.0
        

        所以我在这里修剪第二个(之前的所有内容:

        root@host:~# php -v  | head -1 | cut -d "(" -f 1-2
        PHP 5.3.28-1~dotdeb.0 with Suhosin-Patch (cli)
        

        注意:后面会有一个空格(末尾有空格)

        或者,您可以随时使用包管理器来确定这一点(推荐):

        root@debian-or-ubuntu-host:~# dpkg -s php5 | grep 'Version'
        Version: 5.3.28-1~dotdeb.0
        

        ...或在CentOSRed Hat LinuxScientific Linux 分布上:

        [root@rpm-based-host ~]# rpm -qa | grep php-5
        php-5.4.28-1.el6.remi.x86_64
        

        【讨论】:

          猜你喜欢
          • 2012-08-26
          • 1970-01-01
          • 2012-09-26
          • 1970-01-01
          • 2016-04-30
          • 1970-01-01
          • 2011-10-27
          • 1970-01-01
          相关资源
          最近更新 更多