60分前と今の2つのタイムスタンプの間で行を選択したいと思います。
私のコマンドは
sed -n '/"$(date -d '60 minutes ago' +"%H:%m")"/,/"$(date -d +"%H:%m")"/p' /var/www/html/glpi/files/_log/event.log/
しかし、私は次のようになります。
sed: -e expression #1, char 14: unterminated address regex
ベストアンサー1
あなたのようなsedスクリプトは、入力の開始と終了のタイムスタンプに完全に依存します。これをしないでください。 awkを使用して<=
比較を実行すると、正確な開始および終了タイムスタンプが入力に存在しない場合にも機能します。例:
awk -v beg="$(date -d '60 minutes ago' +'%H:%m')" -v end="$(date +'%H:%m')" '(beg <= $0) && ($0 <= end)' /var/www/html/glpi/files/_log/event.log/
テストするサンプル入力/出力を提供していないため、これは必要なもののテストされていない推測にすぎません。動作の有無は、主に入力でタイムスタンプが表示される位置によって異なりますが(各行の先頭にあると仮定します)、場所に関係なくスクリプトを簡単に調整できます。