ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

Windows標準のコマンドでテキストを検索したい!~番外編~

先日、Windows標準のコマンドでテキストを検索したい! - ITエンジニアの成長ブログという記事を書きました。
その記事の中では、Windows標準コマンドの一つであるfindコマンドの簡単な使い方を見ていきました。
今回は、そこで記載していない補足事項的な部分をちょこっと触れていこうと思います。

findコマンドでAND・OR検索はできるの?

こちらはテキスト検索では定番にやりたくなることだと思いますが、Windows標準のfindコマンドでAND・OR検索はできるのでしょうか?
結論から言うと、findコマンド単体の機能では出来ないようです。しかし、それぞれ工夫することで実現が可能です。それではその方法を見ていきましょう!

今回検証時に使うテキストは以下の通りです。
・test.log

2020-08-26 15:02:03.123 INFO 正常に処理が完了しました。END。
2020-08-26 15:02:04.001 INFO 正常に処理が完了しました。COMPLETED。
2020-08-26 15:02:05.034 ERROR エラーが発生しています。
2020-08-26 15:05:01.298 INFO 正常に処理が完了しました。
findコマンドでのAND検索

findコマンドでのAND検索はどのように実現するのか見ていきましょう。
細かい説明はなしに、コマンド実行結果を見ていきましょう。

>find "INFO" test.log | find /N /I "END"
[3]2020-08-26 15:02:03.123 INFO 正常に処理が完了しました。END。

上記コマンドでは、2つのfindコマンドを |(パイプ)で繋げることで複数の条件に当てはまる行のみ検索することを実現しています。
最初のfindコマンドではtest.logから"INFO"を含む行を検索し、その検索された結果から2つ目のfindコマンドで"END"を含む行を検索した結果が最終的に出力されます。

findコマンドの検索するテキストファイルのパスは実はオプションです。今回の、|(パイプ)コマンドの後に記載しているfindコマンドのようにファイルパスを指定しなかった場合は、|(パイプ)に渡された情報から文字列を検索する仕様です。

いやしかし、|(パイプ)は個人的にLinuxのシェルで使うものだけと思っていたのですがWindowsでも使えるものなんですね。
使えることが分かったので、これからWindowsバッチを作るときとかには使っていきたいと思います。

findコマンドでのOR検索

今度は、findコマンドでのOR検索はどのように実現するのか見ていきましょう。
と、大げさに章立てしていますがOR検索を実現するには単純にコマンドを複数回実行するだけです。
以下では、最初のfindコマンドで”INFO"を含む行を検索し、2回目のfindコマンドで"ERROR"を含む行を検索しています。

>find "INFO" test.log

---------- TEST.LOG
2020-08-26 15:02:03.123 INFO 正常に処理が完了しました。END。
2020-08-26 15:02:04.001 INFO 正常に処理が完了しました。COMPLETED。
2020-08-26 15:05:01.298 INFO 正常に処理が完了しました。
>find "ERROR" test.log

---------- TEST.LOG
2020-08-26 15:02:05.034 ERROR エラーが発生しています。

検索したい文字列を指定したfindコマンドをそれぞれ実行して結果を得るということです。
やや面倒ですが、先ほどAND検索のように一度のfindコマンドでは実現できないみたいです。。。

終わりに

今回はWindows標準のコマンドであるfindコマンドの使い方番外編ということで、
AND・OR検索を見ていきました。非常に単純なことですが、上手く組み合わせれば検索できる条件に幅を持たせることができると思います。

今回も最後までお読みいただきありがとうございました。では、今回はこの辺で。