정규식 문자 근처의 여러 줄을 바꾸는 방법은 무엇입니까?

정규식 문자 근처의 여러 줄을 바꾸는 방법은 무엇입니까?

이것은 "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용입니다.

답변1

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

이는 다음에 적용됩니다.sed 변화command()를 에서 까지 c의 행 범위 로 변환합니다. 이 줄은 다음으로 대체됩니다.script.sh/^[[:blank:]]*'bootstrap')//^[[:blank:]]*\*)

  'bootstrap')
     {NEW_BOOTSTRAP_CODE}
  *)

관련 정보