Bashで日付変数を再構成する方法

Bashで日付変数を再構成する方法

dd.mm.yyyyユーザーが入力した日付を次の形式で取得し、それを変数として保存するbashスクリプトがあります。 $date

yyyymmdd今後の使用のために、この変数を次の形式に変更する必要があります。

だから、もはやポイントはなく、ポイント間の値は後ろから前に行きます。

sedたとえば、これを簡単に行う方法はありますか?

答え1

純粋なbash解決策は次のとおりです。

$ # input is dd.mm.yyyy
$ input_date="dd.mm.yyyy"
$ # output will be yyyymmdd
$ output_date=${input_date:6:4}${input_date:3:2}${input_date:0:2}
$ echo "$output_date"
yyyymmdd

答え2

これが私の簡単なsed方法です。特に巧妙ではありませんが、効果的です:-)

$ IN=12.34.5678
$ OUT=$(echo $IN | sed 's/\(..\).\(..\).\(....\)/\3\2\1/')
$ echo $OUT
56783412
$

awk方法

$ OUT=$(echo $IN | awk -F. '{print $3$2$1}')
$ echo $OUT
56783412
$

tr//ハイブリッドtacpaste

$ OUT=$(echo $IN | tr '.' '\n' | tac | paste -s -d "")
$ echo $OUT
56783412
$

答え3

echo "26.11.2016" | awk -F"." '{print $3$2$1}'

出力:20161126

答え4

このdateコマンドは、修飾子を使用してISO8601形式で出力できます。

robert@pip2:/tmp$ date
Mon Aug  5 16:09:35 PDT 2019

robert@pip2:/tmp$ date --iso-8601
2019-08-05

...そしてその間にあるハイフンを取り除きます。 sedを使用してください:

robert@pip2:/tmp$ date --iso-8601 | sed s/-//g
20190805

関連情報