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' 部分(这个字符串总是会改变但保持在同一个地方)并将其设置为一个变量。

最初我以为我可以使用 grep 或 sed 并在每个 '|' 之后打印一行 并将第 13 行设置为变量。

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

4

3 回答 3

9

使用awk

awk -F"|" '{print $NF}'

这将起作用:

echo " Web App | domain.com | 2012-02-23 | 2012-08-31 | | anotherdomain.com | 
       e-8sgkf3eqbj | Web-App-Name | Status | Linux | Ready | N/A | 
       20120831 - daily" | awk -F"|" '{print $NF}'

和产量:

20120831 - daily

要分配给变量data.txt为了简单起见,包含您的字符串,它也适用于echo上述):

$ myvar=$(awk -F"|" '{print $NF}' data.txt)
$ echo $myvar
20120831 - daily

解释

设置-F输入字段分隔符,在本例中为|. NF是一个内置awk变量,表示输入字段的数量,$变量前面的 访问该元素,即在本例中为行中的最后一个字段 ( $NF)。

或者:您可以使用以下命令获取最后三个由空格(awk默认)分隔的字段中的每一个:

awk '{print $(NF-2), $(NF-1), $NF}'
于 2012-08-31T23:31:56.483 回答
3

Levon 的回答效果很好,但我只需要证明 shell 脚本总是有其他方法。

这个使用称为的基本工具cut

echo "Web App | domain.com | 2012-02-23 | 2012-08-31 | | anotherdomain.com |  e-8sgkf3eqbj | Web-App-Name | Status | Linux | Ready | N/A |   20120831 - daily" | cut -d"|" -f13
于 2012-08-31T23:37:38.790 回答
0

我知道这已经被接受了,但这里是如何在纯 bash 中做到这一点:

string="Web App | domain.com | 2012-02-23 | 2012-08-31 | | anotherdomain.com | e-8sgkf3eqbj | Web-App-Name | Status | Linux | Ready | N/A | 20120831 - daily"
myvar="${string##*| }"
echo "$myvar"
于 2012-09-04T23:59:27.353 回答