値を取得しようとしていますが、最後の日時だけを知りたいです。

値を取得しようとしていますが、最後の日時だけを知りたいです。

ログ全体の代わりに日付と時刻の値を取得します。

${1} - Bashのコマンドライン引数

${i} - for ループの配列項目

grep -ERh "stopped" ems_*/SystemOut*.log | tail -1

現在の価値はこれです

ems_inet1/SystemOut1.log:[6/8/17 10:47:45:896 SGT] 00000066 ServerCollabo A   WSVR0024I: Server ems_inet1 stopped

一部のコードでは、角かっこ内に複数の値があります。

ems_inet1/SystemOut1.log:[9/24/19 17:23:34:324 SGT] 00004442 SystemOut O 24 Sep 2019 17:23:34:324 [INFO] [ems_inet1] [CID-UIASYNC-16412]

sedでRegExを試しましたが、正常に動作しませんでした。

\[\d{2}\/\d{2}\/\d{2}\s+\d{2}:\d{2}:\d{2}:\d{3}\s+\w{3}\]

私はこの値が欲しい

[6/8/17 10:47:45:896 SGT]

@Bodoで解決しました

答え1

完全な実際のデータがない場合、この回答はいくつかの推測に基づいています。

私は仮定する

  • ファイル名の角かっこ([])と
  • データには、常に行の先頭の括弧内にタイムスタンプが含まれています。

sed
(編集:より多くのグループがある場合は、角括弧内に最初のグループをキャプチャするように正規表現を変更します)を使用して出力を後処理できます。 )

grep -ER "stopped" ems_rpt1/SystemOut.log | tail -1 | sed 's/[^[]*\(\[[^]]*\]\).*/\1/'

注:使用したオプションは、-E「拡張正規表現を使用した一致」を意味します。あなたの例では単純な文字列だけを使用するので、「一致に固定文字列を使用する」を意味するoption-Fの代わりに使用できます。-E

関連情報