Como faço para substituir várias linhas próximas a caracteres regex?

0

Aqui está uma parte do meu arquivo fonte, chamado "mysqld":

exit $r
    ;;
  'bootstrap')
      if test "$_use_whatever" == 1 ; then
        log_failure_msg "Please use galera_new_cluster to start the mariadb service with --wsrep-new-cluster"
        exit 1
      fi
      # Bootstrap the cluster, start the first node
      # that initiate the cluster
      echo $echo_n "Bootstrapping the cluster.. "
      $0 start $other_args --wsrep-new-cluster
      exit $?
      ;;
  *)
      # usage
      basename='basename "$0"'

Desejo substituir tudo na seção "bootstrap" (ou seja, de > > 'boostrap') ... *) < & lt ;, não inclusive) por "{NEW_BOOTSTRAP_CODE}". Então, eu quero que isso se torne:

exit $r
    ;;
  'bootstrap')
     {NEW_BOOTSTRAP_CODE}
  *)
      # usage
      basename='basename "$0"'

Eu tentei todos os tipos de regexes de sed e perl, mas parece que continuo pendurado naspas simples ou parênteses. Aqui está a minha melhor tentativa falhada:

perl -i -0777 -pe 's/\'bootstrap\'\)/.+\*\)/{BOOTSTRAP_CODE}/g' /etc/init.d/mysqld

É para um pi de framboesa, se isso faz alguma diferença.

    
por William 09.02.2017 / 22:50

1 resposta

1

sed "/^[[:blank:]]*'bootstrap')/,/^[[:blank:]]*\*)/c \
  'bootstrap')\
    {NEW_BOOTSTRAP_CODE}\
  *)" script.sh

Isso aplica o comando sed alteração ( c ) ao intervalo de linhas em script.sh de /^[[:blank:]]*'bootstrap')/ a /^[[:blank:]]*\*) . Substitui essas linhas por

  'bootstrap')
     {NEW_BOOTSTRAP_CODE}
  *)
    
por 09.02.2017 / 23:09