На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ALXR, Pr0[)!9Y, Profi
  
    > SED: Исключить несколько подстрок из определенных строк, Использую SED с Perl расширением.
      Искомая строка может выглядеть двумя способами:

      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 - не прокатывает, она тогда всё вычищает под корень.

      Помогите или пните в каком направлении копать.
        И вот опять вечный баг: зачем непременно запихивать всю логику в один регвыр? Можно же решить задачу в два приема: выбрать строки с подходящими префиксами и затем в выбранных строках удалить все лишнее.
          Цитата AVA12 @
          И вот опять вечный баг: зачем непременно запихивать всю логику в один регвыр? Можно же решить задачу в два приема: выбрать строки с подходящими префиксами и затем в выбранных строках удалить все лишнее.

          Нет, не получится. (Хотя, конечно, затратив силы и измордовав код)
          Там идет выборка переменного количества строк из файла.
          sed -n Start,Stopp | и так далее по подстановкам...
          В общем, довольно сложно расковырять его на предлагаемое решение, да и усложнять многое, когда можно усложнить малое, не самое правильное решение с т.з. читабельности и понтяности кода.
            Ну, если поставлена задача "забить гвоздь непременно микроскопом", то, боюсь, никто не поможет.
              sed умеет не только подстановки делать. Там есть ещё и ветвления (включая условные) и метки. Поэтому вполне можно отделить строки содержащие echo и call …, обработать их и вывести.
              Так что повнимательнее почитай его описание
              Должно получиться что-то вроде
              ExpandedWrap disabled
                /^echo |^call +:PrintOut/ !b skip
                s/@@@@@@@@//g
                :skip
                p
              Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script Execution time: 0,0727 ]   [ 14 queries used ]   [ Generated: 5.12.19, 20:05 GMT ]