Как заменить несколько строк рядом с символами регулярного выражения?

Вот часть моего исходного файла, названная" 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"`

Я хочу заменить все в разделе" начальной загрузки "(то есть из >> ' boostrap ') ... *) <<, не включительно) с "{NEW_BOOTSTRAP_CODE}". Итак, я хочу, чтобы он стал:

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

Я пробовал все виды регулярных выражений sed и perl, но, похоже, я продолжаю получать повесил трубку на одинарные кавычки или круглые скобки. Вот моя лучшая неудачная попытка:

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

Это для Raspberry Pi, если это имеет значение.

0
09.02.2017, 23:50
1 ответ
sed "/^[[:blank:]]*'bootstrap')/,/^[[:blank:]]*\*)/c \\
  'bootstrap')\\
    {NEW_BOOTSTRAP_CODE}\\
  *)" script.sh

Это применяет команду sed change ( c ) к диапазону строк в script.sh из / ^ [[ : blank:]] * 'bootstrap') / до / ^ [[: blank:]] * \ *) . Он заменяет эти строки на

  'bootstrap')
     {NEW_BOOTSTRAP_CODE}
  *)
1
28.01.2020, 02:46

Теги

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