Bash:从命令行输出中获取部分字符串

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行设置为变量.

我是新手来编写脚本,所以任何帮助都会很棒.谢谢.

Lev*_*von 9

使用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)