Как получить часть вывода команды в 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