Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[98.82.140.17] |
|
Сообщ.
#1
,
|
|
|
Искомая строка может выглядеть двумя способами:
echo eCMD Linker. Ver.: 1.04 (beta) [ @@@@@@@@15/@@@@@@@@06/@@@@@@@@14 @@@@@@@@16:12 ] или call :PrintOut eCMD Linker. Ver.: 1.04 (beta) [ @@@@@@@@15/@@@@@@@@06/@@@@@@@@14 @@@@@@@@16:12 ] Строка может начинаться с "echo" или "call :PrintOut", потом может быть какой угодно текст, но если появляется цифра, она может предваряться 8ю символами "@@@@@@@@" (обход глюка в sed c подстановками). У меня образовалась задача: убрать все "@@@@@@@@" в строках начинающихся с "echo" или с "call *?:PrintOut", а строки начинающиеся как то иначе не трогать. Моих знаний такой regexp составить не получается. s/((echo)|(call *?:PrintOut))(.*?)@@@@@@@@/\1\4/g Но это совсем не то, что надо. p.s. s/@@@@@@@@//g - не прокатывает, она тогда всё вычищает под корень. Помогите или пните в каком направлении копать. |
Сообщ.
#2
,
|
|
|
И вот опять вечный баг: зачем непременно запихивать всю логику в один регвыр? Можно же решить задачу в два приема: выбрать строки с подходящими префиксами и затем в выбранных строках удалить все лишнее.
|
Сообщ.
#3
,
|
|
|
Цитата AVA12 @ И вот опять вечный баг: зачем непременно запихивать всю логику в один регвыр? Можно же решить задачу в два приема: выбрать строки с подходящими префиксами и затем в выбранных строках удалить все лишнее. Нет, не получится. (Хотя, конечно, затратив силы и измордовав код) Там идет выборка переменного количества строк из файла. sed -n Start,Stopp | и так далее по подстановкам... В общем, довольно сложно расковырять его на предлагаемое решение, да и усложнять многое, когда можно усложнить малое, не самое правильное решение с т.з. читабельности и понтяности кода. |
Сообщ.
#4
,
|
|
|
Ну, если поставлена задача "забить гвоздь непременно микроскопом", то, боюсь, никто не поможет.
|
Сообщ.
#5
,
|
|
|
sed умеет не только подстановки делать. Там есть ещё и ветвления (включая условные) и метки. Поэтому вполне можно отделить строки содержащие echo и call …, обработать их и вывести.
Так что повнимательнее почитай его описание Должно получиться что-то вроде /^echo |^call +:PrintOut/ !b skip s/@@@@@@@@//g :skip p |