(ログ)ファイルに検索パターンがない場合でも、検索パターンより大きい日付のみが表示されます。

(ログ)ファイルに検索パターンがない場合でも、検索パターンより大きい日付のみが表示されます。

特定の検索パターンより大きい日付のシステムログを検索したいと思います。たとえば、日付がJAN 6 16:24:00。 sed()が利用可能であることを知っていますが、sed -n '/JAN 6 16:24:00/,$p' ${LOGFILE}これは私が指定した正確な日付のエントリがある場合にのみ機能しますsed。ログファイルに正しい日付のエントリが含まれていないと、JAN 6 16:24:00実際のエントリがないため、出力を取得できません。ロジックでは文字列のみが比較されます。

わかりました。journalctl --since "XXX"しかし、これはおそらくSystemDベースではなくホストで機能します。ただし、デフォルトではこの機能が必要です。

X「従来の」GNUツールを使用して、仮定されたログファイルに含まれていない日付よりも最新のログファイルのすべてのエントリを印刷する方法はありますか?X

ベストアンサー1

ログが次のようなより便利な形式の場合:

2021-01-06 16:24:00 log text

次のことができます。

awk '$0 >= "2021-01-06 16:24:00"'

ところで、ここでは年を指定せず、英語の月名の略語を使用して日付をフォーマットするので、より複雑です。

Date::Parseタイムスタンプの形式を理解し、年のないタイムスタンプをperlモジュールなど、過去に最も最近発生したタイムスタンプとして解釈する日付パーサーを使用する方が良いでしょう。

<yourfile.log perl -MDate::Parse -ne '
  BEGIN{$start = str2time("2021-01-06 16:24")}
  print if str2time(substr($_, 0, 15)) >= $start'

年のない日付の場合、日付が今月の日付でない限り、Date::Parsesはstr2time過去の日付を提供するようです。たとえば、2022年1月15日に実行される場合、「2月2日」は2021-02-02と解釈され、「1月31日」は2022-01-31と解釈されます。

おすすめ記事