コマンドラインで複数ファイルから特定の文字列を検索する

  • 54
    Like
  • 4
    Comment
More than 1 year has passed since last update.

あまりによく使うのでメモ。

$ find . -type f -name "*.js" | xargs grep 'keyword' -n 

結果

カレントディレクトリからのファイルのパス:行数 検索文字列を含む行

./app/assets/javascripts/form.js:20:            var keyword = "opp";
./app/assets/javascripts/form.js:211:           var result = keyword + "test";

↑適当に書いたけどこんな感じに出力される。

解説

find

http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230777/
ファイルやディレクトリを検索するコマンド

.

カレントディレクトリ配下全てを指定している。
もちろんpathをしぼることも可能。

-type f

指定したファイル・タイプを検索する。
cはdがディレクトリを、fが通常ファイルを、lがシンボリック・リンクを表す。
今回は通常ファイルなのでfを指定。

-name "*.js"

ファイル名がpatternと同じファイルを検索する。ワイルド・カードを用いることができる。
例ではjsファイルのみに絞っている。

 |

前のコマンドの出力結果を後ろのコマンドに渡すやつ。
読み方がわかんないんで誰か教えてください。

# 追記(2014/05/16)

パイプですね。
_hecoさんありがとうございます。
http://ja.wikipedia.org/wiki/%E3%83%91%E3%82%A4%E3%83%97_%28%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%29

xargs

http://itpro.nikkeibp.co.jp/article/COLUMN/20140331/547143/
指定されたコマンドと初期引数に、標準入力から読み込んだ引数をつけてコマンドラインを生成し、実行するコマンド。
コマンドが指定されなかった場合はechoに送られる。

grep

http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230786/
文字列を検索するコマンド

'keyword'

検索したい文字列

-n

行数を表示する。

まとめ

複数ファイルをまとめて置換なんかも簡単にできる。
たまにしかしなくても忘れないようにしたい。