2012-09-05 6 views
0

Я запускаю команду в CentOS, которая дает мне вывод строки с несколькими строками, и я хочу захватить определенную часть этого вывода и установить ее в переменную ,Bash: Захват вывода выполнения программы командной строки и установки переменной

Например я бегу CommandLine

ebi-describe-env 

Мой выход следующим образом:

ApplicationName | CNAME | DATECreated | DateUpdated | Description | EndpointURL | 
EnvironmentID | EnvironmentName | Health | Stack | Status | TemplateName | 
Version Label ------------------------------------- 
Web App | domain.com | 2012-02-23 | 2012-08-31 | | 
anotherdomain.com | e-8sgkf3eqbj | Web-App-Name | Status | 
Linux | Ready | N/A | 20120831 - daily 

Я хочу, чтобы захватить «20120831-дневной» часть мульти-строки, которая в то же самое разместить каждый вызов и установить его в переменную. Я считаю, что «------» означает новую строку или вывод.

Я очень новичок в создании сценариев bash, поэтому любая помощь будет отличной. Спасибо.

Примечание: Я задал вопрос раньше, и он был разрешен с помощью awk, но оказалось, что это было только для вывода одной строки. Previous question

ответ

1

Это должно сделать трюк:

dateStr=$(ebi-describe-env | grep "Linux | Ready" | cut -t"|" -f4) 

Выполнить команду и передать его выходные данные через grep, который будет передавать только линии (ну, линия), которые содержат строку «Linux | Ready». Затем это передается разрезу, который обрабатывает «|» как разделитель и только печатает 4-е поле. Затем вывод записывается конструкцией $(...) и присваивается переменной dateStr.

Немного лучше awk решение Бен Джексон, который может заменить мою grep/cut комбинацию:

dateStr=$(ebi-describe-env | awk -F"|" 'NR==6 {print $NF}') 
2

Вы можете легко добавить шаблон, чтобы соответствовать определенной линии к предыдущему ответу:

awk -F"|" 'NR == 6 {print $NF}' 

«Растр» для блока в awk может быть любым условным. В моем примере NR - это номер строки, так что печатает последнее (разделенное по трубам) слово в строке 6. Вы также можете использовать шаблон, например /Linux/, если вы хотите, чтобы в нем была строка «Linux».