Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:获取命令行程序执行的输出并设置为变量_Bash_Amazon Web Services_Awk_Centos_Amazon Elastic Beanstalk - Fatal编程技术网

Bash:获取命令行程序执行的输出并设置为变量

Bash:获取命令行程序执行的输出并设置为变量,bash,amazon-web-services,awk,centos,amazon-elastic-beanstalk,Bash,Amazon Web Services,Awk,Centos,Amazon Elastic Beanstalk,我在CentOS中运行一个命令,它给我一个多行字符串的输出,我想获取该输出的某个部分,并将其设置为一个变量 例如,我运行命令行 ebi-describe-env 我的输出如下: ApplicationName | CNAME | DATECreated | DateUpdated | Description | EndpointURL | EnvironmentID | EnvironmentName | Health | Stack | Status | TemplateName |

我在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解决的,但结果证明它只适用于一行输出。

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

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

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

您可以轻松添加一个模式,将特定行与前面的答案相匹配:

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

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

这应该可以做到:

dateStr=$( ebi-describe-env | grep "Linux | Ready" | cut -t"|" -f4 )
运行该命令并通过
grep
传递其输出,这将只传递包含字符串“Linux | Ready”的行(好的,行)。然后将其传递给cut,cut将“|”视为分隔符,只打印第四个字段。然后,
$(…)
构造捕获输出,并将其分配给变量
dateStr

稍微好一点的是Ben Jackson的
awk
解决方案,它可以取代我的
grep/cut
组合:

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

这应该可以做到:

dateStr=$( ebi-describe-env | grep "Linux | Ready" | cut -t"|" -f4 )
运行该命令并通过
grep
传递其输出,这将只传递包含字符串“Linux | Ready”的行(好的,行)。然后将其传递给cut,cut将“|”视为分隔符,只打印第四个字段。然后,
$(…)
构造捕获输出,并将其分配给变量
dateStr

稍微好一点的是Ben Jackson的
awk
解决方案,它可以取代我的
grep/cut
组合:

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