Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在LinuxBash中获得命令输出的一部分?_Linux_Bash - Fatal编程技术网

如何在LinuxBash中获得命令输出的一部分?

如何在LinuxBash中获得命令输出的一部分?,linux,bash,Linux,Bash,如何在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 ionCub

如何在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.
我只想输出
PHP5.3.28(cli)
部分。我该怎么做

我尝试了
php-v | grep'php5.3.28'
,但结果是:
php5.3.28(cli)(构建时间:2014年6月23日16:25:09)
,这不是我想要的。

您可以尝试下面的命令

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

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

    • 在纯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
      

      如果希望所有包含“php”的行,请执行以下操作:

       $ php -v | grep -i "php"
      
      然后,如果您想在其中包含前三个单词,可以按照@Avinash的建议添加另一个管道:

      $ php -v | grep -i "php" | awk 'NR==1{print $1,$2,$3}'
      
      一个经典的“百万种剥猫皮的方法”问题

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

      括号在我所有的平台上看起来都是一致的,所以我使用了以下内容:

      例如,关于:

      因此,我在这里修剪第二个
      )之前的所有内容:

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

      或者,您可以始终使用软件包管理器来确定(推荐):

      …或在一个或一个发行版上:

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

      行得通,但我不明白你在做什么。你能解释一下吗?哦,等等,我现在明白了!:)非常感谢。。!
      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
      
      [root@rpm-based-host ~]# rpm -qa | grep php-5
      php-5.4.28-1.el6.remi.x86_64