これら2つのファイルをgrepして他のファイルを除外する方法

これら2つのファイルをgrepして他のファイルを除外する方法

文字列に対して2つのファイルをgrepしようとしています。

これらのファイルは

/confluent/logs/server.log
/confluent/logs/server.log.1

しかし、私たちは他のファイルを次のように一致させたくありません。

/confluent/logs/server.log.2
/confluent/logs/server.log.3 

など

そのため、代わりに次のようにdouble grepを実行してください。

grep log.retention.bytes  /confluent/logs/server.log
grep log.retention.bytes  /confluent/logs/server.log.1

log.retention.bytes 同時に、2つのファイルの一致を探したいです。

私たちはしようとします

grep log.retention.bytes   /opt/mcspace/confluent/logs/server.log.*[1]

しかし、これは間違っています。

答え1

grep log.retention.bytes server.log{,.1}

ログエントリを時系列(追加)に保つには、ファイルの順序を逆にする必要があります。

grep log.retention.bytes server.log{.1,}

もちろん、これは次のとおりです。

grep log.retention.bytes server.log.1 server.log

中括弧拡張は、grepコマンドを実行する前にシェルによって実行されるためです。

また、zshシェルを使用すると、簡単に自動ワイルドカードを使用できます。パターンに一致する最後のN個のファイルそして:

grep log.retention.bytes server.log*(Om[-2,-1])

Omつまり時間に基づいて降順に並べ替え[-2,-1]最後の2行を取得します。より多くのファイルを検索して手動で入力したくない場合は、このヒントを覚えておくことをお勧めします。

答え2

両方のファイルをgrepする最も簡単な方法は、両方のファイルをgrepに提供することです。

grep log.retention.bytes /confluent/logs/server.log /confluent/logs/server.log.1

より多くのファイルがある場合は、手動ですべてを一覧表示するか、特定のファイルとのみ一致するglobを使用できます。たとえば、bashでは:

shopt -s extglob
grep log.retention.bytes /confluent/logs/server.log?(.1)

最後に、おそらくあなたの場合、最も簡単な方法は、次のように支柱拡張を使用することができます。トーマスの答えから

関連情報