Заменить шаблоны, которые начинаются и заканчиваются в разных строках

Если мы можем использовать гну grep:

cut -c$(grep -Fbo '*' <<<_"$con" | cut -f1 -d: | paste -sd,) <<<"$prot"

Я уверен, что это может играться в гольф больше, но это хорошо работает. -bo причины grep для вывода (b) yte-смещения с (o) nly-соответствия (не целые строки), который как побочный эффект заставляет grep находить всеми соответствиями, не всего один на строку. Мы затем управляем этим в разделенный запятыми список чисел, к которым мы можем питаться как параметр командной строки cut. Раздражающая деталь - то, что grep думает, что индексы символа на основе 0, и сокращение думает, что они на основе 1, таким образом, мы должны сместиться $con одним символом; следовательно, _.

$ con="                        *   ******       *** ** *                  **"
$ prot="M-ASDFRMKAWRGMLMI----WSGRCYYYYHQFLIMASDFRMKAMKAWWSGRCYNSHPPAAQVFYWLGLLSDVAGSALEAQ"
$ printf "%s\n%s\n" "$con" "$prot"
                        *   ******       *** ** *                  **
M-ASDFRMKAWRGMLMI----WSGRCYYYYHQFLIMASDFRMKAMKAWWSGRCYNSHPPAAQVFYWLGLLSDVAGSALEAQ
$ cut -c"$(grep -Fbo '*' <<<_"$con" | cut -f1 -d: | paste -sd,)" <<<"$prot"
RYYHQFLMKAKAWGL
3
12.05.2015, 01:18
2 ответа

С GNU SED :

sed '/binaries=(/,/)/{
       //!d
       /)/e uname
     }'

Заменить uname с вашей командой.

4
27.01.2020, 21:12

Я бы сделал это в awk, например:

awk '
  f && /)/ { f=0 }
  !f
  !f && /binaries=\(/ { f=1 ; p=1 }
  p { system ("your_command") ; p=0 }
'

где «your_command» определит замену.

Объяснение: флаг F будет управлять состоянием; Если он установлен, вы находитесь в блоке, который должен быть заменен. С матчем начала и конечного шаблона флаг изменяется соответственно. В то время как вы находитесь в блоке, системный вызов будет выполняться; Флаг P используется для печати его только один раз.

Чтобы заменить исходный файл создать новый файл и перезаписать оригинал один позже, или использовать недавнюю версию GNU awk с вариантом --i Inflace .

3
27.01.2020, 21:12

Теги

Похожие вопросы