我在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行设置为变量。
我非常擅长打击脚本,所以任何帮助都会很棒。谢谢。
答案 0 :(得分: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
变量,表示输入字段的数量,变量前面的$
访问该元素,即在这种情况下是该字段中的最后一个字段line($NF
)。
或者:您可以使用以下内容获取由空格分隔的最后三个字段(awk
默认值)中的每一个:
awk '{print $(NF-2), $(NF-1), $NF}'
答案 1 :(得分: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
答案 2 :(得分:1)
我知道这已经被接受了,但是这里是如何用纯粹的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"