【问题标题】:grep multiple words using results from previous grep使用先前 grep 的结果 grep 多个单词
【发布时间】:2013-03-08 13:25:32
【问题描述】:

我有大量文件,我想在其中进行搜索。

我想查找被X 包围的所有单词,并且只查找单词。我用后视和前瞻来做到这一点:

grep -rhoP "(?<=X)[a-zA-Z0-9_]*(?=X)" .

现在我想知道之前的结果中是否有带有完整上下文的单词被Y 包围。我可以为一个特定的单词做到这一点abc

grep -rP "(?<=Y)abc(?=Y)" .

但是我怎样才能将这两个命令连接在一起呢?

更新

我有大量的 C 文件。 我们所有的 api 函数首先在我们的许多 .h 文件之一中声明,并在我们的许多 .c 文件和内联 .h 文件之一中使用。

有些函数可能不能直接访问,而是通过函数指针访问,但事实证明这对开发来说是一个很大的障碍。为此,我们制作了一些宏(FP 和 CALL),以便能够轻松打开和关闭此要求。

FP(DoThis)
void DoThis(void);
  • 在要求 ON 的情况下,FP 定义了一个函数指针 - 在本例中为 DoThis - 稍后可以通过使用 CALL(DoThis)(); 来使用它。
  • 在要求 OFF 的情况下,FP 扩展为空,CALL(DoThis) 扩展为仅DoThis。

可以通过以下方式获取以这种方式创建函数指针的所有函数的列表:

grep -rhoP "(?<=FP\()[a-zA-Z0-9_]*(?=\))" .

可以通过以下方式获取使用 DoThis 函数的函数指针的所有位置的列表:

grep -rP "(?<=CALL\()DoThis(?=\))" .

现在我想要一个所有位置的列表,其中可以获取使用FP 和CALL 创建的任何函数的函数指针。 所以不知何故,我想将两个 grep 链接在一起,以便将第一个 grep 的每个结果都提供给第二个,并将最终结果组合在一起。

【问题讨论】:

  • grep -rhoP "(?&lt;=X)[a-zA-Z0-9_]*(?=X)" .|grep -P "(?&lt;=Y).*(?=Y)" 对你有用吗?
  • @Kent 否。第二个 grep 的结果可能来自与第一个 grep 的结果不同的文件。第二个 grep 确实需要再次搜索所有文件。
  • 哦,我误会你了。所以这两个 grep 彼此没有任何关系,但你想一口气得到结果。那么这个呢? grep -rhoP "(?&lt;=X)[a-zA-Z0-9_]*(?=X)|(?&lt;=Y)[a-zA-Z0-9_]*(?=Y)" .
  • 所以这是使用grep -e something -e someotherthing的问题,对吧?
  • @kent 感谢您的想法,但我似乎不擅长提出正确的问题。我更新了它,希望现在会更清楚。

标签: grep pipe


【解决方案1】:

也许是这样的好先生

grep -rho 'XY[a-zA-Z0-9_]*YX' . | sed 's/[XY]//g'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多