文字列から日付をパースする

Bash:
文字列から日付をパースする

どのようにして:

Bash自体は直接的な日付解析能力にかなり限定されており、より洗練された操作のためにdateawkのような外部ツールに頻繁に依存しています。ここでは、特定の形式を解析し、その後dateコマンドを使用して変換したり操作を行ったりする方法を説明します。

例 1: 日付文字列を抽出し、別の形式に変換します。

例えば、yyyy-mm-ddの形式で日付があり、それをdd-mm-yyyyに変換したいとします。

original_date="2023-04-01"
formatted_date=$(date -d $original_date '+%d-%m-%Y')

echo $formatted_date

サンプル出力:

01-04-2023

これはdateコマンドを-dオプションと共に使用して入力日付文字列を指定し、出力をフォーマットするために+%d-%m-%Yを使用します。

例 2: awkを使用して構造化されたテキストラインから日付を解析し、変換します。

ログファイルの行が次のようにあるとします:

2023-04-01 12:00:00 ユーザーがログインしました

awkdateを使用して日付部分を抽出し変換することができます。

log_line="2023-04-01 12:00:00 ユーザーがログインしました"
date_part=$(echo $log_line | awk '{print $1}')
formatted_date=$(date -d $date_part "+%A, %B %d, %Y")

echo $formatted_date

サンプル出力:

土曜日, 4月 01, 2023

この例では、awkを使用してログラインを分割し、日付部分を抽出します($1は最初のスペースで区切られたフィールドを表します)。その後、dateを使用してそれを再フォーマットします。

第三者ツールの使用

より複雑な解析を行う場合や、さまざまな日付形式を扱う場合、dateutilsのような第三者ツールが非常に便利です。

dateutilsを使用した例:

例えば、非標準形式の日付文字列、April 01, 2023があるとします。

original_date="April 01, 2023"
formatted_date=$(dateconv -i "%B %d, %Y" -f "%Y-%m-%d" <<< $original_date)

echo $formatted_date

サンプル出力:

2023-04-01

このコマンドは、dateutilsdateconvを使用し、入力形式を-iで、求める出力形式を-fで指定します。dateutilsは幅広い日付と時間の形式をサポートしており、Bashスクリプトでの日付解析タスクに非常に多様であることができます。