次の手順を実行して、システムログに特定のメッセージのすべてのインスタンスを時系列で表示しようとします。
grep squiggle /var/log/messages*
残念ながら、グローバルパターンは現在アクティブなファイルと最初に一致します。例えば。
/var/log/messages
/var/log/messages-20120220
/var/log/messages-20120227
/var/log/messages-20120305
/var/log/messages-20120312
つまり、最新のメッセージが最初に表示され、その後に履歴メッセージが時系列で表示されます。
messages
リストの最後に空の一致(つまりのみ)が表示されるようにグローバルパターンの動作を調整することは可能ですか?
そうでなければ、この問題を解決する良い方法は何ですか?
答え1
zshでは、以下を使用して一致順序を制御できます。グローバル予選。
echo /var/log/messages* # usual lexicographic order
echo /var/log/messages*(On) # reverse lexicographic order
echo /var/log/messages*(om) # reverse chronological order (ascending mtime)
echo /var/log/messages*(Om) # chronological order order (descending mtime)
(より多くの可能性についてはマニュアルを参照してください。)最新バージョンの比較機能を使用または提供して、独自のソートoe
順序を定義することもできますo+
。
ここで正しいファイルの順序は時系列です。ただし、bashでも名前に基づいて簡単にシミュレートできます。
grep squiggle /var/log/messages{-*,}
答え2
ワイルドカードの順序を変更する方法がわかりませんが、あなたのケースに簡単な解決策があります。
grep squiggle /var/log/messages-* /var/log/messages
つまり、globパターンのファイルは一致せず、引数リストの末尾messages
に追加されます。grep
答え3
次のように、ls -tr(mod時系列ソートと逆順ソート)でバックティックを使用できます。
grep squiggle `ls -tr /var/log/messages*`