2012-09-05 10 views
0

我在CentOS中運行了一個命令,該命令給出了一個多行字符串的輸出,我想抓取該輸出的某個部分並將其設置爲一個變量。Bash:抓取命令行程序執行的輸出並將其設置爲變量

比如我運行命令行

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

這應該做的伎倆:通過grep

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

運行命令和管道輸出,這將僅通過線(當然,行),包含字符串的「Linux |就緒」。然後傳遞給剪切,它將「|」作爲分隔符並僅打印第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/的模式。

相關問題