我在CentOS中运行一个命令,它给出了一个多行字符串的输出,我想获取该输出的某个部分并将其设置为变量。
例如,我运行命令行
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-daily'部分并将其设置为变量。我相信'------'意味着新的一条线或输出。
我非常擅长打击脚本,所以任何帮助都会很棒。谢谢。
注意:之前我问过这个问题并用awk解决了,但事实证明这只是一行输出。 Previous question
答案 0 :(得分:2)
您可以轻松添加模式以匹配特定行与上一个答案:
awk -F"|" 'NR == 6 {print $NF}'
"模式"对于awk
中的块,可以是任何条件。在我的示例中,NR
是行号,因此打印第6行的最后一个(管道分隔的)单词。如果您想要具有&#34的行,也可以使用类似/Linux/
的模式。版本; Linux"在它。
答案 1 :(得分:1)
这应该可以解决问题:
dateStr=$( ebi-describe-env | grep "Linux | Ready" | cut -t"|" -f4 )
运行命令并通过grep
管道输出,它只传递包含字符串“Linux | Ready”的行(井,行)。然后将其传递给cut,对待“|”作为分隔符,仅打印第4个字段。然后,$(...)
构造捕获输出并将其分配给变量dateStr
。
Ben Jackson的awk
解决方案稍微好一些,它可以取代我的grep/cut
组合:
dateStr=$( ebi-describe-env | awk -F"|" 'NR==6 {print $NF}' )