Bashスクリプトからこの部分文字列を取得するには?

Bashスクリプトからこの部分文字列を取得するには?

私はbashスクリプトを作業しています。

文字列を含むvarがあります。以下は文字列です。

tSA_15_20161014_11-12-50

デフォルトでは、フォーマットはtSA_(id)_(year)(month)(day)_(hour)-(min)-(seg)

重要な情報:

  • IDは0から999までの数字です。
  • 年の形式は次のとおりです。イヤ
  • 月形式mm
  • 日本語形式DD
  • 時間形式24時間

私が得たい文字列は次のとおりです。

20161014111250

これはyyyymmddHHMMSS

英語は私の母国語ではないので理解できない部分があれば教えてください。ありがとうございます。

答え1

パラメータを使用した拡張bash

$ var='tSA_15_20161014_11-12-50'

$ var="${var#*_}"  ## Extracts the portion after first `_` i.e. 
                      new `var` will be `15_20161014_11-12-50`

$ var="${var#*_}"  ## again gets the portion after first `_`, so in this case
                      after operation `var` will contain `20161014_11-12-50`

$ echo "${var//[-_]/}"  ## Replaces all `-` and `_` from `$var` with null
20161014111250

答え2

echo "tSA_15_20161014_11-12-50" | awk -F'_' '{print $3$4}' | tr -d -

echo var 保存文字列

説明する:

awk -F'_' '{print $3$4}'フィールド区切り文字を次に変更し、3番目と_4番目の列を印刷します。

出力は次のとおりです2016101411-12-50

tr -d --前の結果から削除されました。

答え3

与えられた

var='tSA_15_20161014_11-12-50'

それから

IFS=_ read -a arr <<< "${var//-/}"
printf '%s%s\n' "${arr[2]}" "${arr[3]}"
20161014111250

答え4

別のawk方法。awk複数の文字をフィールド区切り文字として使用できるため、これは1つのステップで実行できます。

$ awk -F'[-_]' '{print $3$4$5$6}' <<<"$var"
20161014111250

またはPerlでは:

$ perl -pe 's/.+?_.+?_//; s/[-_]//g' <<<"$var"
20161014111250

または

$ perl -F_ -ane 's/-//g for @F; print @F[2..$#F]' <<<"$var"
20161014111250

私はそれを使用していますここに文字列がありますしかし、シェルが上記のecho $var | commandコマンドをそれぞれサポートしていない場合。

関連情報