尝试使用grep执行多行perl正则表达式,不包括短语

时间:2015-05-19 19:53:12

标签: regex grep

所以我试图找到遵循排除某些文本的模式的函数。我知道如果我正在寻找以下功能

void myfunction(unsigned int a)
{
  //Something something here 
}

我可以使用以下

找到这个
grep -IPzor 'void.*myfunction(\n|.)*\{(\n|.)*\}' ./*

这似乎正常。有两件事我无法弄清楚该怎么做。

1)如果我想忽略其中包含“某事”一词的功能该怎么办?

假设我现在有以下功能:

void myfunction1(unsigned int a)
{
  //Something something here 
}

void myfunction2(unsigned int a)
{
  //Other stuff here
}

我只想找到像function2这样的东西。我试着这样做:

grep -IPzor 'void.*myfunction(\n|.)*\{(\n|.)*(?!Something|something)(\n|.)*\}' ./*

这种不同的变化并不像我预期的那样有效。它只是找不到任何东西,将短语从“某些东西”改为“没有”也无济于事。

2)如果我想找到只有相同数量的'{'和'}'的结果怎么办?

为此,我不知道从哪里开始。结果有时会导致函数后面的额外文本...

以下是我读过的一些链接:

Regex (grep) for multi-line search needed

https://askubuntu.com/questions/551338/how-do-i-grep-for-multiple-patterns-on-multiple-lines

A regular expression to exclude a word/string

0 个答案:

没有答案