ある文字列を含むファイルをLinuxコマンドで検索する方法を、備忘録に残します。
はじめに
おはよう。@bioerrorlogです。
コードを検索したいときなど、特定の文字列を含むファイルをコマンドで検索したい時があります。
そのたびに毎回コマンド調べているので、今回はそのやり方の備忘録を残します。
ある文字列を含むファイルをコマンドで検索する
やり方
特定の文字列をあるディレクトリ以下で再帰的に検索するには、以下のコマンドを使います:
grep -r [検索する文字列] [検索対象のパス]
使用例:
以下の例ではfunc
という文字列を、./src
ディレクトリ以下で再帰的に検索します。
$ grep -r "func" ./src ./src/Main.gd:func _ready(): ./src/Main.gd:func _process(delta): ./src/Prey.gd:func _physics_process(delta): ./src/Boid.gd:func _ready(): ./src/Boid.gd:func _process(delta): ./src/Boid.gd:func set_prey_position(position: Vector2): ./src/Boid.gd:func process_centralization(centor: Vector2): ./src/Boid.gd:func process_cohesion(neighbors): ./src/Boid.gd:func process_alignments(neighbors): ./src/Boid.gd:func process_seperation(neighbors): ./src/Boid.gd:func steer(var target): ./src/Boid.gd:func get_neighbors(view_radius):
また、出力結果をファイル名のみにする場合は、オプションに-l
を追加します:
grep -rl [検索する文字列] [検索対象のパス]
使用例:
以下の例ではfunc
という文字列を./src
ディレクトリ以下で再帰的に検索し、該当のファイル名を出力します。
$ grep -rl "func" ./src ./src/Main.gd ./src/Prey.gd ./src/Boid.gd
解説
それでは、上で紹介したコマンドを一つずつ解説します。
まずgrep
は、与えたパターンをファイルから検索するコマンドです。
$ man grep DESCRIPTION grep searches for PATTERN in each FILE.
grep
コマンドは、以下の基本文法で使用します:
SYNOPSIS grep [OPTION...] PATTERNS [FILE...]
上の使用例をこれに当てはめますと:
$ grep -rl "func" ./src
-rl
というオプションで、func
というパターンを./src
パスで検索している、ということになります。
ここで-rl
は、-r
オプションと-l
オプションを併用していることを意味しています。
-r
オプションは、指定したパス以下を再帰的(recursively)に検索することを指定します。
-l
オプションは、出力をファイル名のみに絞ることを指定します。
$ man grep -r, --recursive Read all files under each directory, recursively, following symbolic links only if they are on the command line. Note that if no file operand is given, grep searches the working directory. This is equivalent to the -d recurse option. -l, --files-with-matches Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning will stop on the first match.
おわりに
今回は、ある文字列を含むファイルをLinuxコマンドで検索する方法を簡単にメモしました。
ちょっとした(しかし面倒くさい)こういった処理をパッとできてしまうのは、コマンド処理のいいところだなと改めて感じます。
関連記事
よく使うLinuxコマンドの使い方を一覧でメモしました:
www.bioerrorlog.work
ほかにもLinux関連の技術メモ書いています:
www.bioerrorlog.work