複数のファイルで最後に現れる文字列を探す

複数のファイルで最後に現れる文字列を探す

最後に表示される文字列を見つけるには、複数のログファイル(すべて過去24時間以内に作成され、すべて同じディレクトリに保存されている)を検索する必要があります。私が書いたコマンドは次のとおりです。

find . -mtime 1 | grep fileprefix | xargs grep 'search string' | tail -1

しかし、これはファイルの最後の行だけを返します。すべての行を得るために調整する方法についての提案はありますか?

ベストアンサー1

すべてが1つのディレクトリにある場合は、次のことができます。

for file in *fileprefix*; do
    grep 'search string' "$file" | tail -1
done

tac大容量ファイルの場合は、ファイルを逆順に(最後の行から)印刷してから、最初の項目に合わせてgrep -m1作業を高速化することをお勧めします。これにより、ファイル全体を読む必要がなくなります。

for file in *fileprefix*; do
    tac file | grep -m1 'search string'
done

どちらも一致するディレクトリがないとしますfileprefix。エラーがあると、無視できるエラーが発生します。これが問題の場合は、ファイルを確認してください。

 for file in *fileprefix*; do
    [ -f "$file" ] && tac file | grep -m1 'search string'
 done

ファイル名も印刷する必要がある場合は、-Hgrep呼び出しにその名前を追加してください。またはgrep、サポートされていない場合は検索も実行するように指示します/dev/null。これは出力を変更しませんが、grep複数のファイルが提供されるため、常に各ヒットのファイル名を印刷します。

for file in *fileprefix*; do
    grep 'search string' "$file" /dev/null | tail -1
done

おすすめ記事