文字列の一部を抽出するには、シェルを使用する必要があります。

文字列の一部を抽出するには、シェルを使用する必要があります。

このようなスクリプトがありますが、

#/bin/bash -x
LASTBUILD=' 174254491  2018-08-08T11:04:40Z  gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz
 TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)'

echo "this is the LASTBUILD ============== $LASTBUILD"

LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3

echo "this is the LATESTBUILD ############### $LATESTBUILD"

実行後の結果は次のように表示されます。

[root@root ~]# echo $LATESTBUILD

[root@root ~]#

私の予想結果は次のとおりです。

[root@root ~]# echo $LATESTBUILD
gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz
[root@root ~]#

上記のコードは機能しません。

PS:awkも試してみましたが、成功しませんでした。

LATESTBUILD=$LASTBUILD | awk -F '/' '{print $5}'

答え1

awk '{ print $3 }' <<< $LASTBUILD

awkのデフォルトフィールド区切り文字は空白なので、スペースで区切られた3番目のフィールドが印刷されます。

答え2

スクリプトにはいくつかの問題があります。

  1. ハッシュ爆発が無効です。あなたはそうしなければ#/bin/bash -xなりません。#!/bin/bash -x
  2. LASTBUILD変数が奇妙です。各列は二重スペースで区切られ、奇妙なcut動作を引き起こし、ここに改行文字を挿入したくありません。
  3. LATESTBUILD=echo $LASTBUILD | cut -d ' ' -f 3何もない。この中になければなりませんコマンドの置き換えしかし、それでも二重間隔のために動作しません。それが必要です:LATESTBUILD=$(cut -d ' ' -f5 <<<"$LASTBUILD")
  4. スクリプトの内部に設定された変数はスクリプトの外部で使用できないため、echo $LATESTBIULDスクリプトの実行後にコマンドラインで操作を実行すると機能しないため、機能しないでください。

以下はスクリプトの作業バージョンです。

#!/bin/bash

LASTBUILD='174254491   2018-08-08T11:04:40Z  gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)'

echo "this is the LASTBUILD ============== $LASTBUILD"

LATESTBUILD=$(cut -d ' ' -f5 <<<"$LASTBUILD")

echo "this is the LATESTBUILD ############### $LATESTBUILD"

答え3

シェルを使用してこの作業を慎重に実行できます。

LASTBUILD=' 174254491  2018-08-08T11:04:40Z  gs://abc/kishor/5.4.0.61/xyz-5.4.0-61.tgz TOTAL: 46 objects, 7325896651 bytes (6.82 GiB)'
set -f               # disable filename generation (globbing)
set -- $LASTBUILD    # specifically un-quoted, to allow splitting
LATESTBUILD=$3

答え4

どうですか?

read _ _ LATESTBUILD _ <<< $LASTBUILD

関連情報