#はじめに
この記事は初心者の初心者による初心者のための記事となっております。
特に未経験エンジニアが右も左もわからないまま現場の放り込まれて、現場上長から「この辺Grepしといて~」言われたときに「ぐれっ...ぷ...?」とならない為の記事です。
#そもそもGrepって?
じゃあ、まずそのGrepとやらは何かって話なんですけど、Grepっていうのは
「grep」は、Unixなどのオペレーティングシステム(OS)のコマンドで、「全体から (Global)正規表現 (Regular Expression) に一致する行を表示(Print)する」というその名の由来のとおり、文字列を複数ファイルから検索します。
広範囲かつ大量のファイルを扱う今日、「grep」は多くのテキストエディタに搭載されるようになりました。
OSのコマンド「grep」は検索結果をコンソール上に出力するため、結果リストからファイルを開くことはできませんでしたが、テキストエディタの「grep」=「グローバル検索」機能は結果リストをテキストエディタ上に出力するため、結果リストからファイルを開き検索文字の位置にジャンプすることができます。
ってことです。
...はい、頭が痛くなりますね。
要は**色んなファイルから特定の文字列を検索したいぜ!!!**ってことです。
最初からそう言ってほしいですね。
#じゃあGrepするならサクラエディタなの?
んなことはありません。上記でUnixのOSコマンドっていってるぐらいなので、Linuxのコマンドでもあります。さらに言えば、別のテキストエディタの秀丸でも使えますし、Visual Studio Codeでも使えます。
じゃあ何でサクラエディタかっていうと、みんな好きでしょ?サクラエディタ。少なくとも私は好き。だから、サクラエディタです。(単純)
#サクラエディタのインストール
そうは言っても、サクラエディタをまだ入れてないという方もいるでしょう。そうでしょう。そんな方は以下のサイトからサクラエディタをダウンロード!そして、インストール!!以上!!!(初心者とはいえインストールは個人で頑張ってくだせえ、後生です)
https://sakura-editor.github.io/
#Grep画面を出してみよう
以下の画面から
Ctrl+Gで以下の画面が出るはずです。
できました?素敵です。
#さっそくGrep!...の前に少し説明
はやる気持ちもわかりますが、よく使う項目だけ押さえておきましょう。
###①条件
ここに検索したい文字を入れます。簡単だね。
###②ファイル
検索対象のファイルを指定します。ちなみに*(ワイルドカード)が使えるので、javaファイルを検索したいときは*.javaで検索できますし、cssファイルとかなら*.cssとかで検索できます。
###③フォルダ
検索対象のフォルダを指定します。後述の「④サブフォルダからも検索する」にすごーく絡んでくるので注意しましょう。
###④サブフォルダからも検索する
ここにチェックが入ってないと指定フォルダの配下のフォルダまで検索してくれません。大事件です。よくわからなかったら、とりあえず入れときましょう。(検索に時間かかったり、ヒット数えげつないことになるかもだけど)
###⑤英大文字と小文字を区別する
そのまんまです。でも割と重宝します。
###⑥正規表現
はい!これ大事です!!**これにチェックが入ってないと検索条件に正規表現が使えません!**AND検索とかOR検索するときに永遠と「おっかしいなぁ、これでヒットするはずなんだけどなぁ」と時間を無駄にすることになります。
え?そんなアホなことしないって?しましたけど、なにか??
最低限このへんだけ一旦覚えておきましょう。
他の項目は公式サイトにちゃんと説明があるんで、そちらを読みましょう。
#というわけでGrepしてみよう
お待たせしました。やっとこさGrepしてみましょう。とりあえず今回はお試しで
・system.outという文字列を
・eclipse-woekspace\SampleProject配下の全部のフォルダの
・javaファイルを対象に
Grepしてみましょう。
以下のように入力して
検索すると
ダーンと表示されます。(ろくな勉強してないことがバレそう...)
ちなみに、ファイル名をダブルクリックすると
ファイルを開いてくれます。(バレた...)
#AND検索OR検索
とまぁ機能として、こんなもんなんですが、「単一文字列だけじゃヒット数えぐくね?」ってなりますよね。というわけで正規表現を使ってAND検索とOR検索をやっていきましょう。
皆さんくれぐれも正規表現のチェックを忘れないでくださいね。
絶対に正規表現のチェックいれてくださいね!
(ここから先はテキストベースで進めていきたいと思います。理由?疲れたからだけど?)
##AND検索
AND検索の場合は以下のように条件を指定しましょう。
^(?=.*検索したい文字1)(?=.*検索したい文字2).*$
ちなみに、これ(?=.*検索したい文字n)
でいくつでも繋げられます。便利~。
一応他にもやり方はあるんですが、個人的にこれが一番使いやすいです。
###ADN検索(検索したい文字&検索除外文字)追記2021/4/4
AND検索だけど、「ある文字列を含んで、ある文字列を含まない」を検索したいときってありますよね?そんな時はこちらです。
^(?=.*検索したい文字)^(?!.*検索対象外にしたい文字).*$
##OR検索
OR検索の場合はもっと簡単です。
検索したい文字1|検索したい文字2
パイプで繋ぐだけ。こちらもパイプで繋げば、じゃんじゃか繋げられます。簡単~。
#おわりに
とりあえず、これでなんとかGrepはできると思います。まぁぶっちゃけこれだけだと「で、こっからどうすんの?」みたいな感想はあると思います。例えばここから「バックアップを取りつつ置換したい」とか。そのへんは自分でいろいろ弄ってみたり、公式ドキュメント読んでみたり...ねっ?私も余裕のある時にまた書こうと思ってるし...。とりあえず、今回はここまで!
ではでは、お疲れ様でした~。