linux - 使用shell脚本将文件中的字符串替换为另一个具有特殊字符的字符串

标签 linux sed

我尝试将以下文件中的字符串替换为另一个具有特殊字符(如(=,",-) )的字符串。

这是服务文件,我需要自定义并将命名服务添加到此文件重新启动

#!/bin/bash

. /etc/init.d/functions

PIDFILE=/var/run/Naming_Service.pid

PORT=

OPTIONS="-p ${PIDFILE}"

RETVAL=0

prog="Naming_Service"

    start() {
        echo -n $"Starting $prog: "
    
        if [ $UID -ne 0 ]; then
    
            RETVAL=1
    
            failure
    
        else
    
            setsid /usr/local/bin/Naming_Service ${OPTIONS} &
    
            RETVAL=$?
    
    
        fi
    
        echo 
    
        return $RETVAL
    
    }

在此文件中,我想替换第一次出现的

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 命令编写了一个 shell 脚本文件,我遇到了特殊符号的问题。 你能给出解决方案吗

PORT_NS=13021

PIDFILE=/home/vagrant/Naming_Service_${PORT_NS}.pid

PIDFILE_13016=/home/vagrant/Naming_Service_${PORT_NS}.pid

ORIGINAL="OPTIONS="-p ${PIDFILE}""

REPLACE="OPTIONS_13016="-p ${PIDFILE_13016} -ORBEndpoint iiop://172.31.153.56:13016""

sed -i "0,/$ORIGINAL/s//$REPLACE/" "tao"

最佳答案

试试这个

sed '0,/\PIDFILE=\/var\/run\/Naming_Service.pid/ s//\PIDFILE_1234=\/var\/run\/Naming_Service_1234.pid\n\PIDFILE_1235=\/var\/run\/Naming_Service_1235.pid\n\PIDFILE_1236=\/var\/run\/Naming_Service_1236.pid\n /' script > newscript
sed '0,/\OPTIONS="-p ${PIDFILE}"/ s//\OPTIONS_1234="-p ${PIDFILE_1234} -ORBEndpoint iiop:\/\/10.12.23.34:1234"\n\OPTIONS_1235="-p ${PIDFILE_1235} -ORBEndpoint iiop:\/\/10.12.23.34:1235"\n\OPTIONS_1236="-p ${PIDFILE_1236} -ORBEndpoint iiop:\/\/10.12.23.34:1236"\n /' newscript > script

应该输出你需要的内容。

关于linux - 使用shell脚本将文件中的字符串替换为另一个具有特殊字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40601465/

相关文章:

linux - LFS :coreutils compile error

linux - 如何应用压缩补丁?

linux - Condor 作业 - 将 shell 脚本作为可执行文件运行

linux - Linux 内核(>2.6)中如何使用 NPTL 实现 pthread?

batch-file - 批处理文件执行命令前加1

linux - 如何在 TinyCore 上安装 VirtualBox Guest Addition

bash - 我可以使用 sed 来操作 bash 中的变量吗?

linux - 哪个命令可以快速搜索一行中的连续模式

linux - 使用 sed,如何删除某一行范围内字符串的所有实例?

linux - 使用 "if"和 "case"更改主机名