ログ全体の代わりに日付と時刻の値を取得します。
${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