【问题标题】:Using shell script to replace the string in file with another string having special character使用 shell 脚本将文件中的字符串替换为另一个具有特殊字符的字符串
【发布时间】:2017-03-28 20:11:19
【问题描述】:

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

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

#!/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 命令的 shell 脚本文件”。
  • 我做了基本的方法,就像我在文件 sed -i '0,/$ORIGINAL/$REPLACE' 文件名中写了下面的 cmd
  • “特殊符号问题”?嗯,我希望你写了哪些特殊符号会导致你出现问题,那么也许我/我们可以提供帮助。但我不能花时间猜测哪个。 (请用不工作的东西更新你的 Q,包括(非常)小的“特殊符号”样本以及处理它们后所需的输出。好吗?;-))。祝你好运。
  • 第一次出现 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" 这就是我要找的
  • edit 请提供有关该信息的问题。

标签: linux sed


【解决方案1】:

试试这个

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

应该输出你需要的东西。

【讨论】:

  • 它正在删除我的完整文件并显示错误,例如 addns.sh: 8: addns.sh: sed0,/\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 /: 未找到sed: -e 表达式 #1, char 107: 未终止的 `s' 命令
  • 真奇怪,在我的电脑上工作完美无瑕。你复制粘贴了吗?
  • 它对我有用。我犯了一个小错误。但最终用户无法提供这样的模式,sed '0,/\PIDFILE=\/var\/run\/Naming_Service.pid/s//\PIDFILE_1234=\/var\/run\/Naming_Service_1234.pid\n /' 脚本 > newscript sed '0,/\OPTIONS="-p ${PIDFILE}"/s//\OPTIONS_1234="-p ${PIDFILE_1234} -ORBEndpoint iiop:\/\/10.12.23.34:1234"\ n /' newscript > script 所以我期待一些模式来实现这一点
猜你喜欢
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
  • 2020-07-12
相关资源
最近更新 更多