Как получить часть вывода команды в 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 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)
и это не то, что я хочу.
Ответы
Ответ 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
классический вопрос "миллионы способов кожи кошки".
Эти методы, кажется, фильтруются пробелами. Если версии/примечания содержат пробелы, это не удается.
Скобки (
однако кажутся согласованными во всех моих платформах, поэтому я использовал следующее:
EG: на debian:
[email protected]:~# php -v | head -1
PHP 5.3.28-1~dotdeb.0 with Suhosin-Patch (cli) (built: Dec 13 2013 01:38:56)
[email protected]:~# php -v | head -1 | cut -d " " -f 1-2
PHP 5.3.28-1~dotdeb.0
Итак, здесь я обрезаю все до второго (
:
[email protected]:~# php -v | head -1 | cut -d "(" -f 1-2
PHP 5.3.28-1~dotdeb.0 with Suhosin-Patch (cli)
note: будет завершающее пробел. (пустое место в конце)
В качестве альтернативы вы всегда можете использовать диспетчер пакетов для определения этого (рекомендуется):
[email protected]:~# dpkg -s php5 | grep 'Version'
Version: 5.3.28-1~dotdeb.0
.... или в каталоге centos/redhat/scientic linux:
[[email protected] ~]# rpm -qa | grep php-5
php-5.4.28-1.el6.remi.x86_64