トップページへ

grepでマッチした前後の行を表示する方法

小粋空間 » Linux » grepでマッチした前後の行を表示する方法

grepでマッチした前後の行を表示する方法を紹介します。

1.問題点

下記はPerlのプログラムから"run_callback"というメソッドをgrepコマンドで検索したところです。

% grep -r run_callback CMS/Entry.pm
    $app->run_callbacks(
        $app->run_callbacks(

メソッドはマッチしますが、パラメータが改行して記述されているのですべての内容を確認することができません。

マッチした後ろの行も確認したいのですが方法がわかりません。

ということで、grepコマンドでマッチした後の行を表示する方法を紹介します。

その他、grepでマッチした前の行や前後行を同時に表示する方法もあわせて紹介します。

2.grepでマッチした後の行を表示する

grepでマッチした後の行を表示するには「-A」オプションを付与します。

% grep -A 3 -r run_callback CMS/Entry.pm
    $app->run_callbacks(
        'cms_post_bulk_save.' . ( $type eq 'entry' ? 'entries' : 'pages' ),
        $app, \@objects );
    $app->add_return_arg( 'saved' => 1, is_power_edit => 1 );
--
        $app->run_callbacks(
            'cms_post_bulk_save.'
                . ( $obj->class eq 'entry' ? 'entries' : 'pages' ),
            $app, \@objects

これでマッチした行の後ろの行(赤色部分)が表示されました。

「-A」オプションの後方に、表示させたい行数を指定します。ここでは「3」を指定しています。

3.grepでマッチした前の行を表示する

grepでマッチした前の行を表示するには「-B」オプションを付与します。

% grep -B 3 -r run_callback CMS/Entry.pm
        );
        push( @objects, { current => $entry, original => $orig_obj } );
    }
    $app->run_callbacks(
--

    if (@objects) {
        my $obj = $objects[0]{current};
        $app->run_callbacks(

これでマッチした行の前の行(赤色部分)が表示されました。

「-B」オプションの後方に、表示させたい行数を指定します。ここでは「3」を指定しています。

4.grepでマッチした前後の行を表示する

grepでマッチした前後の行を表示するには「-C」オプションを付与します。

% grep -C 3 -r run_callback CMS/Entry.pm
        );
        push( @objects, { current => $entry, original => $orig_obj } );
    }
    $app->run_callbacks(
        'cms_post_bulk_save.' . ( $type eq 'entry' ? 'entries' : 'pages' ),
        $app, \@objects );
    $app->add_return_arg( 'saved' => 1, is_power_edit => 1 );
--

    if (@objects) {
        my $obj = $objects[0]{current};
        $app->run_callbacks(
            'cms_post_bulk_save.'
                . ( $obj->class eq 'entry' ? 'entries' : 'pages' ),
            $app, \@objects

これでマッチした行の前後の行(赤色部分)が表示されました。

「-C」オプションの後方に、表示させたい行数を指定します。ここでは「3」を指定しています。

5.ファイルを指定しない場合の表示

ファイルを指定しない場合、左端にファイル名が表示され、検索文字列にマッチした行は「:」、それ以外の行は「-」で表示されます。

% grep -C 3 -r run_callback *
CMS/Entry.pm-        );
CMS/Entry.pm-        push( @objects, { current => $entry, original => $orig_obj } );
CMS/Entry.pm-    }
CMS/Entry.pm:    $app->run_callbacks(
CMS/Entry.pm-        'cms_post_bulk_save.' . ( $type eq 'entry' ? 'entries' : 'pages' ),
CMS/Entry.pm-        $app, \@objects );
CMS/Entry.pm-    $app->add_return_arg( 'saved' => 1, is_power_edit => 1 );
--
CMS/Entry.pm-
CMS/Entry.pm-    if (@objects) {
CMS/Entry.pm-        my $obj = $objects[0]{current};
CMS/Entry.pm:        $app->run_callbacks(
CMS/Entry.pm-            'cms_post_bulk_save.'
CMS/Entry.pm-                . ( $obj->class eq 'entry' ? 'entries' : 'pages' ),
CMS/Entry.pm-            $app, \@objects

6.オプションについて

オプションのA/B/Cの意味はそれぞれ、

となります。

また、オプションは下記の設定でも動作します(NUMは行数)。

--after-context=NUM
--before-context=NUM
--context=NUM

« 前の記事へ

次の記事へ »

トップページへ