【问题标题】:grep/ack -o with characters of context (not lines)grep/ack -o 带有上下文字符(不是行)
【发布时间】:2011-12-27 10:37:42
【问题描述】:

我正在寻找一种方法

grep -o "somepattern"

这给了我类似的东西

html/file.js
2:somepattern
5:somepattern

但真正好的是在那场比赛之前和/或之后有几个字符(可能是 20 个)。

我知道有一种方法可以在(上下文)之前和之后显示行,但是有什么方法可以按字符显示上下文吗?例如

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

我问的原因是,如果我递归地 grep 并匹配一个缩小的文件,它会打印整个文件,这非常烦人。

【问题讨论】:

标签: grep filtering ack


【解决方案1】:

使用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 = 

...在“字符串”之前最多显示 10 个字符,在“字符串”之后最多显示 10 个字符...(假设它们在那里)。

为了清楚起见,我在这里使用| head 只是为了将输出限制为 10 行。

【讨论】:

  • 不知道您为什么将其更新为管道进入头部。你之前的 (ack -o '.{0,20}string.{0,20}') 成功了。谢谢
  • 太棒了,谢谢!现在,如果只有一种方法可以保留突出显示
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 2016-09-25
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多