grep -l
次のようなSQLが書かれたファイルがあって、その中から USERS テーブルに INSERT しているフィアルを検索する方法。
% cat sample01.sql -- USERS テーブルにインサートするよん INSERT INTO USERS (id, name, age) VALUES (:ID, :NAME, :AGE) % cat sample02.sql SELECT * FROM USERS % cat sample03.sql UPDATE USERS SET name = :NAME WHERE id = :ID % cat sample04.sql INSERT INTO ORDER (user_id, product, count) INTO (:ID, :PROD, :COUNT) % cat sample05.sql DELETE FROM USERS WHERE id = :ID
こんな感じ?
% grep -l "USERS" *.sql | xargs grep "INSERT" sample01.sql:INSERT INTO USERS (id, name, age) VALUES (:ID, :NAME, :AGE)
grep の l オプションは、マッチした行があれば以降の検索はしなくなり、出力はファイル名だけになる。l オプションを付けない場合この例だと sample01.sql が 2 行表示される。まあ、いいといえばいいんだけど。
ちなみに、今まではこの存在を知らずに次のようなコマンドを打っていた。
% grep "USERS" *.sql | cut -d: -f1 | uniq | xargs grep "INSERT"