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デフォルト)で区切られた最後の3つのフィールドをそれぞれ取得できます。

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

Levonの答えはうまく機能しますが、シェルスクリプトには常に他の方法があることを示さなければなりませんでした。

これはと呼ばれる基本的なツールを使用しています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 に答える