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