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」の部分を取得して、変数に設定したいと思います。「------」は新しい行または出力を意味すると思います。

私はbashスクリプトを初めて使用するので、どんな助けでも素晴らしいでしょう。ありがとうございました。

注:以前に質問したところ、awkで解決されましたが、1行の出力のみであることがわかりました。 前の質問

4

2 に答える 2

2

特定の行を前の回答に一致させるパターンを簡単に追加できます。

awk -F"|" 'NR == 6 {print $NF}'

ブロックの「パターン」は、awk任意の条件付きにすることができます。私の例NRでは行番号であるため、6 行目に最後の (パイプで区切られた) 単語が出力されます/Linux/。「Linux」を含む行が必要な場合のようなパターンを使用することもできます。

于 2012-09-05T20:52:14.983 に答える
1

これでうまくいくはずです:

dateStr=$( ebi-describe-env | grep "Linux | Ready" | cut -t"|" -f4 )

コマンドを実行し、その出力をにパイプしますgrep。これにより、文字列「Linux | Ready」を含む行(まあ、行)のみが渡されます。次に、これは「|」を処理するcutに渡されます。区切り文字として使用し、4番目のフィールドのみを出力します。次に、出力が$(...)構成によってキャプチャされ、変数に割り当てられますdateStr

私の組み合わせawkを置き換えることができるベンジャクソンのソリューションは少し良いです:grep/cut

dateStr=$( ebi-describe-env | awk -F"|" 'NR==6 {print $NF}' )
于 2012-09-05T20:53:31.193 に答える