Я пытаюсь сопоставить следующее: Шаблон начинается с /*
и заканчивается */\n(override\s+)public
, пытался сделать что-то вроде этого:
sed -n '/\/\*/,/\*\/\n(override\s+)public/p' file
И здесь я спрашиваю вас, как написатьэто правильно:)
Если это возможно сделать с помощью grep или awk - это вариант, если это однострочный в perl, это тоже хорошо.
PS.Я не уверен в синтаксисе sed regex, но \s
должен быть пробелом, в идеале [\ \t\r\n]
.
EDIT:
Предположим, у вас есть:
/**
* Some comment goes here
*/
override public function ...
/**
* A comment for another function
*/
public function ...
Выражение даст вам два следующих результата:
/**
* Some comment goes here
*/
override public
и
/**
* A comment for another function
*/
public
РЕДАКТИРОВАТЬ: еще лучше, если кто-то сможет перевести приведенное ниже регулярное выражение в sed, это будет делатьjob.
/\/\*(!?\*\/)*\*\/\s*(overrides\s+)?public/gm
Обратите внимание, что флаг m означает, что регулярное выражение является многострочным, то есть группа с отрицательным прогнозом также будет соответствовать концу строки.Но если это невозможно, но сопоставление концов строк все еще возможно, тогда выражение будет выглядеть так:
/\/\*((!?\*\/)*$)*\*\/[\r\n\t\ ]*(overrides[\r\n\t\ ]+)?public/g