linux远ssh sed,ssh远程执行sed -i命令,替换的内容中含有双引号的问题

ssh远程执行sed -i命令,替换的内容中含有双引号的问题。在ssh 中执行sed -i 来替换匹配的字符串,当替换的内容中包含双引号"时,需要在转义的同时,加上单引号'"'。

示例如下

需求: 修改上述xml中 state="111"这个字段的第一位。

其中1表示服务器在运行,2表示服务器停服了。

然后有如下shell脚本,其中就遇到了一个sed命令替换的字符串中含有双引号的问题。错误信息如下。

bash: -c: line 0: unexpected EOF while looking for matching `"'

bash: -c: line 1: syntax error: unexpected end of file

上述问题一般是shell脚本漏掉了双引号",造成脚本中的双引号不匹配。举例如下

#!/bin/bash

# trouble: script to demonstrate common errors

number=1

if [ $number = 1 ]; then

echo "Number is equal to 1.

else

echo "Number is not equal to 1."

fi

但是我们出现的问题,提示信息跟他一样,但是我仔细检查过,并没有发现任何漏掉字符串的问题。

后来发现有一处引用了一个单个字符串(倒数第四行)

target="state="$targetState" # 之前未加单引号,所以会出错。

正确的代码如下:

#!/bin/bash

function run()

{

idipServer=192.168.10.142

fileName=/home/tomcat/rxjh/apache-tomcat-7.0.68/appcfg/cfg/520050/test.xml

targetIp=${1}

targetState=${2}

target="state='"'$targetState" # 替换的单词中含有双引号,那么用单引号括起来

ssh -n tomcat@$idipServer "sed -i 's/(ip="'$targetIp'.*)(state="...)/1'$target'/g' $fileName"

}

run $1 $2

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值