Попытка сделать многострочное регулярное выражение 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