Mic*_* Le 0 bash awk grep gawk amazon-elastic-beanstalk
我在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
Run Code Online (Sandbox Code Playgroud)
我想抓住20120831 - daily字符串的' '部分(此字符串将始终更改但保持在同一位置)并将其设置为变量.
原来我以为我可以使用grep或sed并在每个'|'之后打印一行 并将第13行设置为变量.
我是新手来编写脚本,所以任何帮助都会很棒.谢谢.
使用awk:
awk -F"|" '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
这将工作:
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}'
Run Code Online (Sandbox Code Playgroud)
和产量:
20120831 - daily
Run Code Online (Sandbox Code Playgroud)
要分配给变量(data.txt仅为了简单起见包含您的字符串,它也适用于echo上述):
$ myvar=$(awk -F"|" '{print $NF}' data.txt)
$ echo $myvar
20120831 - daily
Run Code Online (Sandbox Code Playgroud)
说明
在-F将输入字段分隔符,在这种情况下|.NF是一个内置awk变量,表示输入字段的数量,$变量前面访问该元素,即在这种情况下是行($NF)中的最后一个字段.
或者:您可以使用以下方法获取由空格分隔的最后三个字段(awk默认值)中的每个字段:
awk '{print $(NF-2), $(NF-1), $NF}'
Run Code Online (Sandbox Code Playgroud)