過去 24 時間以内のエントリのログ ファイルを grep しようとしています。次のコマンドを思いつきました。
grep "$(date +%F\ '%k')"\|"$(date +%F --date='yesterday')\ [$(date +%k)-23]" /path/to/log/file
grep で正規表現を使用できることは知っていますが、正規表現にはあまり詳しくありません。今日の何か、または昨日の現在の時間以降の何かを検索していることがわかります。これは機能していません。grep の正規表現でコマンドを変数として渡そうとしているためだと推測しています。また、次のことを思いついた awk で awk を使用することに反対しませんが、変数を適切にチェックしていません。
t=$(date +%F) | y=$(date +%F --date='yesterday') | hr=$(date +%k) | awk '{ if ($1=$t || $1=$y && $2>=$hr) { print $0 }}' /path/to/log/file
変数を設定するのではなく、systimeをawkで使用できると思いますが、systimeにはまったく精通していません。いずれかのコマンドでの提案は大歓迎です! ああ、これがログのフォーマットです:
2012-12-26 16:33:16 SMTP connection from [127.0.0.1]:46864 (TCP/IP connection count = 1)
2012-12-26 16:33:16 SMTP connection from (localhost) [127.0.0.1]:46864 closed by QUIT
2012-12-26 16:38:19 SMTP connection from [127.0.0.1]:48451 (TCP/IP connection count = 1)
2012-12-26 16:38:21 SMTP connection from [127.0.0.1]:48451 closed by QUIT
2012-12-26 16:38:21 SMTP connection from [127.0.0.1]:48860 (TCP/IP connection count = 1)