0

我在 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”部分,并将其设置为一个变量。我相信“------”表示新行或输出。

我对 bash 脚本非常陌生,所以任何帮助都会很棒。谢谢你。

注意:我之前问过这个问题,它是用 awk 解决的,但事实证明它只是用于单行输出。 上一个问题

4

2 回答 2

2

您可以轻松添加模式以将特定行与上一个答案匹配:

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

块的“模式”awk可以是任何条件的。在我的示例NR中是行号,以便在第 6 行打印最后一个(管道分隔的)单词。/Linux/如果您想要其中包含“Linux”的行,您也可以使用模式。

于 2012-09-05T20:52:14.983 回答
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}' )
于 2012-09-05T20:53:31.193 回答