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

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

Posted at April 27,2016 12:33 AM
Tag:[Linux]

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の意味はそれぞれ、

  • A:after-context
  • B:before-context
  • C:context

となります。

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

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

関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)