Попытка сделать многострочное регулярное выражение perl с помощью 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) Что если я хочу найти результаты, в которых найдено только одинаковое количество '{' и '}'?

Для этого я не знаю с чего начать. Результаты иногда заканчиваются дополнительным текстом, который следует за функцией...

Вот некоторые ссылки, которые я прочитал:

Требуется регулярное выражение (grep) для многострочного поиска

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

Регулярное выражение для исключения слова / строки

0 ответов

Другие вопросы по тегам