Я пытаюсь соответствовать следующему: Узор начинается с /*
и заканчивается */\n(override\s+)public
, пытались сделать что-то вроде этого:Match и печать нескольких строк с SED
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
EDIT: Ev лучше, если кто-то может перевести приведенное ниже регулярное выражение в sed, это выполнит эту работу.
/\/\*(!?\*\/)*\*\/\s*(overrides\s+)?public/gm
Обратите внимание, что флаг m означает, что регулярное выражение является многострочным, то есть отрицательная группа просмотра также будет соответствовать контурам строк. Но если это не представляется возможным, но согласование заканчивается линия все еще возможно, то выражение будет выглядеть следующим образом:
/\/\*((!?\*\/)*$)*\*\/[\r\n\t\ ]*(overrides[\r\n\t\ ]+)?public/g
Итак ... если строки 100 и 500 начинаются с «/ *», а линии 200 и 600 начинаются с «переопределять общедоступные» (с любым количеством пробелов между этими двумя словами), то вы хотите печатать строки 100- 600, заканчивающийся на «публичный»? – Beta
'sed' может обрабатывать только одну строку за раз. Если вам нужен шаблон для охвата нескольких строк, вам нужно создать скрипт, который отслеживает, совпадает ли предыдущий llnes с началом вашего шаблона, а если нет, начните сначала. – tripleee