这是要求我想要替换以下字符串
OPTIONS="-p ${PIDFILE}"
带
OPTIONS_1234="-p ${PIDFILE_1234} -ORBEndpoint iiop://10.12.23.34:1234"
OPTIONS_1235="-p ${PIDFILE_1235} -ORBEndpoint iiop://10.12.23.34:1235"
OPTIONS_1236="-p ${PIDFILE_1236} -ORBEndpoint iiop://10.12.23.34:1236"
这是我跟随脚本解决的问题
sed '0,/\PIDFILE=\/var\/run\/Naming_Service.pid/s//\PIDFILE_13021=\/var\/run\/Naming_Service_13021.pid\n\PIDFILE_13022=\/var\/run\/Naming_Service_13022.pid\n\PIDFILE_13023=\/var\/run\/Naming_Service_13023.pid\n /' tao > tao_pid
sed '0,/\OPTIONS="-p ${PIDFILE}"/ s//\OPTIONS_13021="-p ${PIDFILE_13021} -ORBEndpoint iiop:\/\/10.12.23.34:13021"\n\OPTIONS_13022="-p ${PIDFILE_13022} -ORBEndpoint iiop:\/\/10.12.23.34:13022"\n\OPTIONS_13023="-p ${PIDFILE_13023} -ORBEndpoint iiop:\/\/10.12.23.34:13023"\n /' script > new_script
但是如果最终用户想再添加一个像
那样的话OPTIONS_1236="-p ${PIDFILE_1236} -ORBEndpoint iiop://10.12.23.34:1237"
很难保持特殊字符和所有。 任何人都可以建议最好的方法来做到这一点对最终用户来说应该很容易
答案 0 :(得分:0)
您可以使用所需的值设置变量并将其注入sed命令:
num=1234;
sed 's~^\(OPTIONS\)="\(-p \${PIDFILE\)}~\1'"_$num"'="\2'"_$num"'} -ORBEndpoint iiop://10.12.23.34:'"$num"'~' <<< 'OPTIONS="-p ${PIDFILE}"'
<强>输出:强>:
OPTIONS_1234="-p ${PIDFILE_1234} -ORBEndpoint iiop://10.12.23.34:1234"
使用循环:
for num in 1234 1235 1236; do
sed 's~^\(OPTIONS\)="\(-p \${PIDFILE\)}~\1'"_$num"'="\2'"_$num"'} -ORBEndpoint iiop://10.12.23.34:'"$num"'~' <<< 'OPTIONS="-p ${PIDFILE}"'
done
<强>输出:强>
OPTIONS_1234="-p ${PIDFILE_1234} -ORBEndpoint iiop://10.12.23.34:1234"
OPTIONS_1235="-p ${PIDFILE_1235} -ORBEndpoint iiop://10.12.23.34:1235"
OPTIONS_1236="-p ${PIDFILE_1236} -ORBEndpoint iiop://10.12.23.34:1236"