フォルダを無視したいときは こっち → grep で特定のディレクトリを外す - それマグで!
grep -x SEARCH File file ..
- -i, --ignore-case
- PATTERN と入力ファイルの双方で、英大文字と小文字の区別をしないようにします。
- -L, --files-without-match
- -H, --with-filename
- 各々のマッチに対してファイル名を表示します。
- -n, --line-number
- 各出力行の前に、入力ファイルにおける行番号を表示します。
- -r, --recursive
- 各ディレクトリ下のすべてのファイルを再帰的に読み取ります。 これは -d recurse オプションと等価です。
- -C [NUM], -NUM, --context[=NUM]
- NUM で指定した行数 (デフォルトは 2) だけ、パターンにマッチした行の前後の行も 表示します。
- -
- 入力ファイル (ファイルが指定されてないか、 file の部分に - が指定された場合は標準入力)
- -E, --extended-regexp
- PATTERN を拡張された正規表現として扱います (下記参照)。
複数ファイルのgrep
ソースコードパッケージの中から、該当文字を抜き出す.php 以外にも js/jpeg などが有り、PHPだけからGREPしたいとき*1
takuya@atom:/usr/share/epgrec$ find -name '*.php' |xargs -I@ grep thumb @ @unlink(INSTALL_PATH."/".$settings->thumbs."/".$rec->path.".jpg"); $arr['thumb'] = "<img src=\"".$settings->install_url.$settings->thumbs."/".htmlentities($r->path, ENT_QUOTES,"UTF-8").".jpg\" />"; $smarty->assign( "use_thumbs", $settings->use_thumbs ); $thumbname = $filename.".jpg"; $gen_thumbnail = INSTALL_PATH."/gen-thumbnail.sh"; $gen_thumbnail = GEN_THUMBNAIL; "THUMB" => INSTALL_PATH.$settings->thumbs."/".$thumbname, if( $settings->use_thumbs == 1 ) { fwrite($pipes[0], $gen_thumbnail."\n" ); (略) $gen_thumbnail = INSTALL_PATH."/gen-thumbnail.sh"; $gen_thumbnail = GEN_THUMBNAIL; $gen_thumbnail,
なにが何だか分からない.
ファイル名を表示してみる。これでちょっとスッキリ
ファイル名があると、スッキリ落ち着きます.ただこれではファイルのどの辺か分からない.
例
takuya@atom:/usr/share/epgrec$ find -name '*.php' |xargs -I@ grep -H thumb @ ./cancelReservation.php: @unlink(INSTALL_PATH."/".$settings->thumbs."/".$rec->path.".jpg"); ./recordedTable.php: $arr['thumb'] = "<img src=\"".$settings->install_url.$settings->thumbs."/".htmlentities($r->path, ENT_QUOTES,"UTF-8").".jpg\" />"; ./recordedTable.php: $smarty->assign( "use_thumbs", $settings->use_thumbs ); ./Reservation.class.php: $thumbname = $filename.".jpg"; ./Reservation.class.php: $gen_thumbnail = INSTALL_PATH."/gen-thumbnail.sh"; ./Reservation.class.php: $gen_thumbnail = GEN_THUMBNAIL; ./Reservation.class.php: "THUMB" => INSTALL_PATH.$settings->thumbs."/".$thumbname, ./Reservation.class.php: if( $settings->use_thumbs == 1 ) { ./Reservation.class.php: fwrite($pipes[0], $gen_thumbnail."\n" ); (ry)
マッチした箇所の行番号を表示させる
「-n オプション:マッチした箇所の行番号を表示。」をオンにしてやってみる.
takuya@atom:/usr/share/epgrec$ find -name '*.php' |xargs -I@ grep -nH thumb @ ./cancelReservation.php:26: @unlink(INSTALL_PATH."/".$settings->thumbs."/".$rec->path.".jpg"); ./recordedTable.php:63: $arr['thumb'] = "<img src=\"".$settings->install_url.$settings->thumbs."/".htmlentities($r->path, ENT_QUOTES,"UTF-8").".jpg\" />"; ./recordedTable.php:103: $smarty->assign( "use_thumbs", $settings->use_thumbs ); ./Reservation.class.php:244: $thumbname = $filename.".jpg"; ./Reservation.class.php:247: $gen_thumbnail = INSTALL_PATH."/gen-thumbnail.sh"; ./Reservation.class.php:249: $gen_thumbnail = GEN_THUMBNAIL; ./Reservation.class.php:282: "THUMB" => INSTALL_PATH.$settings->thumbs."/".$thumbname, ./Reservation.class.php:294: if( $settings->use_thumbs == 1 ) { ./Reservation.class.php:295: fwrite($pipes[0], $gen_thumbnail."\n" ); ./Settings.class.php:37: if(defined("THUMBS") ) $xml->thumbs = THUMBS; ./Settings.class.php:38: else $xml->thumbs = "/thumbs"; ./Settings.class.php:67: if(defined("USE_THUMBS")) $xml->use_thumbs = USE_THUMBS ? 1 : 0; ./Settings.class.php:68: else $xml->use_thumbs = 0;
なにがどこに見つかったのかわかりやすくなってきました.
マッチした行の前後も表示させる
実際には行の前後を読まないと、意味が通らない.その箇所が探しているところか分からないよね.なので行の前後表示して,見つかった箇所を詳細に見る.
例
takuya@atom:/usr/share/epgrec$ find -name '*.php' |xargs -I@ grep -nH -C 3 thumb @ ./cancelReservation.php-23- // ファイルを削除 ./cancelReservation.php-24- if( file_exists( INSTALL_PATH."/".$settings->spool."/".$rec->path ) ) { ./cancelReservation.php-25- @unlink(INSTALL_PATH."/".$settings->spool."/".$rec->path); ./cancelReservation.php:26: @unlink(INSTALL_PATH."/".$settings->thumbs."/".$rec->path.".jpg"); ./cancelReservation.php-27- } ./cancelReservation.php-28- } ./cancelReservation.php-29- } ./recordedTable.php-60- $arr['asf'] = "".$settings->install_url."/viewer.php?reserve_id=".$r->id; ./recordedTable.php-61- $arr['title'] = htmlspecialchars($r->title,ENT_QUOTES); ./recordedTable.php-62- $arr['description'] = htmlspecialchars($r->description,ENT_QUOTES); ./recordedTable.php:63: $arr['thumb'] = "<img src=\"".$settings->install_url.$settings->thumbs."/".htmlentities($r->path, ENT_QUOTES,"UTF-8").".jpg\" />"; ./recordedTable.php-64- $arr['cat'] = $cat->name_en; ./recordedTable.php-65- $arr['mode'] = $RECORD_MODE[$r->mode]['name']; ./recordedTable.php-66- -- ./recordedTable.php-100- $smarty->assign( "search", $search ); ./recordedTable.php-101- $smarty->assign( "stations", $stations ); ./recordedTable.php-102- $smarty->assign( "cats", $cats ); ./recordedTable.php:103: $smarty->assign( "use_thumbs", $settings->use_thumbs ); ./recordedTable.php-104- ./recordedTable.php-105- $smarty->display("recordedTable.html"); ./recordedTable.php-106- (略
大分わかりやすくなりました.
マッチした箇所は 『:』 で表示される
./recordedTable.php:63: $arr['thumb'] = "<img src=\"".$settings->install_url.$settings->thumbs."/".htmlentities($r->path, ENT_QUOTES,"UTF-8").".jpg\" />";
前後の行は 『-』 で表示される
./recordedTable.php-64- $arr['cat'] = $cat->name_en; ./recordedTable.php-65- $arr['mode'] = $RECORD_MODE[$r->mode]['name'];
参考
man grep
2021/04/04 更新
google 検索がおかしな結果になるのでリンクを追加。
*1:サンプルなので,現実には使わないけれど.