そのため、標準のログ形式を使用したApacheログがたくさんあります。Webクローラーからではないすべてのログ行を取得したい。
次のようなエントリを持つファイルrobot_patternsがあるとします
Googlebot
msnbot-media
YandexBot
bingbot
コマンドを実行grep -f robot_patterns *.log
すると、上記のパターンに一致するボットによってすべてのエントリが取得されます。私の実際のリストには、無視したいボットとエージェントのエントリが30個ほどあります。
しかし、ボットからのものではないすべてのエントリを見つけたいです。試してみてgrep -v -f robot_patterns *.log
、grepから結果が返されないようにします。これは私が期待または望んでいるものではなく、私が望むものを手に入れるための明白な方法を見つけていません。-v
ファイル内の複数のパターンと組み合わせてオプションを使用する場合、grepはすべてのパターンに一致する場合にのみ一致する行を返します。
私のシステムでこれを試してみたところ、grep -v -fには目的の動作があり、パターンに一致しない行のみが返されました。これは(GNU grep)2.14.56-1e3dの場合でした。どのgrepを使用していますか?
—
wingedsubmariner
私は走ってい
—
ゾレダチェ
GNU grep 2.6.3
ます。
さらにテストを行ったところ、パターンファイルに空の行がある場合、すべての行に一致するため、-vで行が返されないことがわかりました。ただし、これは-Fの問題ではなく、-Fはタスクのgrepを高速化する可能性があります-試してみる価値があります。
—
wingedsubmariner
末尾の空行!ああ...それが問題のようです。必要に応じて、回答として追加する必要があります。
—
ゾレダチェ