それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

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'];

最後に色つけて嬉しくなる

--color=auto で色が付く.これで完璧

参考

man grep

*1:サンプルなので,現実には使わないけれど.

広告を非表示にする