正如标题所说,我如何在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)
而这不是我想要的。
答案 0 :(得分:2)
你可以尝试下面的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。 print语句中的,
表示OFS(输出字段分隔符)答案 1 :(得分:0)
在纯粹的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
答案 2 :(得分:0)
如果你想要包含“php”的所有行都这样做:
$ php -v | grep -i "php"
然后据说你想要那些你可以添加另一个管道的前三个单词@Avinash建议:
$ php -v | grep -i "php" | awk 'NR==1{print $1,$2,$3}'
答案 3 :(得分:0)
一种经典的"万种皮肤猫的方式"问题..
这些方法似乎按空格过滤..如果版本/注释包含空格,则失败。
(
括号在我的所有平台上都显得一致,所以我使用了以下内容:
EG:关于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
....或者在centos / redhat / scientificic linux发行版上:
[root@rpm-based-host ~]# rpm -qa | grep php-5
php-5.4.28-1.el6.remi.x86_64