19

私は方法を見つけようとしています

grep -o "somepattern"

それは私に次のようなものを与えます

html/file.js
2:somepattern
5:somepattern

しかし、本当にいいのは、その試合の前後に数文字 (おそらく 20 文字) あることです。

前後の行 (コンテキスト) を表示する方法があることは知っていますが、コンテキストを文字で表示する方法はありますか? 例えば

html/file.js
2:function helloWorld(somepattern) {
5:    var foo = somepattern;

私が質問する理由は、再帰的に grep を実行し、一致する縮小されたファイルをヒットすると、ファイル全体が出力されるため、非常に煩わしいからです。

4

1 に答える 1

25

使用ack:

% ack -o '.{0,10}string.{0,10}' | head
cli/cmdlineparser.cpp:22:#include <string>
cli/cmdlineparser.cpp:23:include <cstring>
cli/cmdlineparser.cpp:37:onst std::string& FileList
ctor<std::string>& PathNam
cli/cmdlineparser.cpp:57:     std::string FileName;
cli/cmdlineparser.cpp:66:onst std::string& FileList
list<std::string>& PathNam
cli/cmdlineparser.cpp:72:     std::string PathName;
cli/cmdlineparser.cpp:92:onst std::string &message)
cli/cmdlineparser.cpp:133:onst std::string errmsg = 

(Gnu) を使用grep:

% grep -no '.\{0,10\}string.\{0,10\}' **/*.[ch]* | head
cli/cmdlineparser.cpp:22:#include <string>
cli/cmdlineparser.cpp:23:include <cstring>
cli/cmdlineparser.cpp:37:onst std::string& FileList
ctor<std::string>& PathNam
cli/cmdlineparser.cpp:57:     std::string FileName;
cli/cmdlineparser.cpp:66:onst std::string& FileList
list<std::string>& PathNam
cli/cmdlineparser.cpp:72:     std::string PathName;
cli/cmdlineparser.cpp:92:onst std::string &message)
cli/cmdlineparser.cpp:133:onst std::string errmsg = 

...'string' の前に最大 10 文字、後に最大 10 文字を表示します... (それらが存在すると仮定します)。

| headここでは、わかりやすくするために出力を 10 行に制限するために使用しています。

于 2011-11-12T00:36:32.330 に答える