Bash:获取命令行程序执行的输出并设置为变量
我在CentOS中运行一个命令,它给我一个多行字符串的输出,我想获取该输出的某个部分,并将其设置为一个变量 例如,我运行命令行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 |
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}' )