如何替换正则表达式字符附近的多行?

如何替换正则表达式字符附近的多行?

这是我的源文件的一部分,称为“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"`

我想用“{NEW_BOOTSTRAP_CODE}”替换“bootstrap”部分中的所有内容(即来自 >>'boostrap')... *)<<,不包括在内)。所以,我希望它变成:

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

这是针对树莓派的,如果这有什么区别的话。

答案1

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

这适用于sed 改变命令 ( ) 到from到c中的行范围。它将这些行替换为script.sh/^[[:blank:]]*'bootstrap')//^[[:blank:]]*\*)

  'bootstrap')
     {NEW_BOOTSTRAP_CODE}
  *)

相关内容