私は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
コマンドをそれぞれサポートしていない場合。