2

grepの出力を次のようにします。

path/filename1-
line1
match
line3
--
path/filename2-
line1
match
line3

私がそうすると、grep -h -C 3 match file私は近づきますが、ファイル名はありません。マニュアルページから、他のオプションは表示されません。

4

2 に答える 2

1

grepで直接それを行うことはできないと思います。おそらくsedを使ってラッパーを書くことができます。フラグを使用する場合-Z、grepは一致した部分からファイル名を分離します(したがって-H、ファイル名を取得するためにも使用します)。次に、現在のファイル名を追跡し、変更されたらそれを印刷してから改行しますが、それ以外の場合は、一致した行の前からドロップします。考えてみると、perlも機能します

于 2013-03-18T03:12:44.680 に答える
1

ackはまさにそれを行います。

$ ack get -C3
unuse
7-
8-my $url = shift || die 'specify a URL';
9-
10:$mech->get( $url );
11-
12-my $text = $mech->content;
13-

whack
47-    Note that this script uses PPI and works only on perl
48-    scripts, modules, tests, etc. PPI takes a bit of time
49-    too, so if running this on an entire large repo, you
50:    may want to multitask or get some coffee.
51-
52-    By default, searches recursively for perl files in . and
53-    identifies the subroutine most likely to invoke confusion

また、ここには表示されていませんが、出力は色分けされていることに注意してください。ファイル名(この例では「unuse」と「whack」)は緑色、行番号は黄色、一致する文字列は逆黄色です。

ackは、特にプログラマー向けのgrepのような検索ツールです。これはhttp://betterthangrep.comで入手でき、多くの*nixディストリビューションにパッケージとして含まれています。Debianから派生したパッケージは、ackを「ack-grep」としてパッケージ化します。

于 2013-03-18T03:22:19.427 に答える