1. 程式人生 > >ssh遠端執行sed -i命令,替換的內容中含有雙引號的問題

ssh遠端執行sed -i命令,替換的內容中含有雙引號的問題

在ssh 中執行sed -i 來替換匹配的字串,當替換的內容中包含雙引號"時,需要在轉義的同時,加上單引號'\"'

示例如下

<?xml version="1.0" encoding="UTF-8"?>
<channel name="test" update="false">
    <server name="01服" ip="111.111.111.111" port="1111"   state="111" device="0"/>
</channel>

需求: 修改上述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 [email protected]$idipServer "sed -i 's/\(ip=\"'$targetIp'.*\)\(state=\"...\)/\1'$target'/g' $fileName" } run $1 $2

相關推薦

ssh遠端執行sed -i命令,替換內容含有引號的問題

在ssh 中執行sed -i 來替換匹配的字串,當替換的內容中包含雙引號"時,需要在轉義的同時,加上單引號'\"' 示例如下 <?xml version="1.0" encoding="UTF-8"?> <channel name=

SSH遠端執行Linux Shell命令

使用強大的paramiko Linux伺服器需要注意防火牆設定和SSH的開啟 注意執行的shell命令前提是Linux系統上有的 #!/usr/bin/python #coding=utf-8 import paramiko import threading import

ssh 遠端執行多個命令,有萬用字元要使用引號,沒有則可以不用

#!/bin/sh  for i in {2..25}  do         ip=10.161.21.$i         echo $ip         t=`ssh [email protected]$ip    "ls /home/unicom

ssh 遠端執行命令

SSH 是 Linux 下進行遠端連線的基本工具,不光可以登入,也可以遠端操作。接下來我們詳細講解一些常用的情況。 1、執行簡單的命令: 1)檢視某臺主機上的磁碟使用情況: $ ssh [email protected] "df -h" ***********

Python開源Devops定時任務管理系統(含定時呼叫介面、定時ssh遠端執行命令

 OpenMangosteen Devops定時呼叫http介面,定時執行SSH命令的WEB定時任務工具。本系統強依賴Flask-APScheduler的功能,只是拓展了web頁面部分。使用Pytho

ssh遠端執行命令並自動退出

ssh命令格式如下: usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D

ssh遠端執行命令

我們直接可以通過ssh命令,直接遠端機器執行命令,那麼我們是不是就可以通過用for迴圈的命令對遠端的機器安裝服務了呢。。 ssh   [email protected]  “yum -y install nginx” 通過上面的命令,可以實現批量

JSch連線SSH遠端執行命令

package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Arr

ssh遠端批量替換某個檔案的字串,ssh遠端執行sudo指令

360xh01~360xh07先做祕鑰驗證然後把lw使用者sudo做無密碼驗證批量查詢某個使用者有沒有定時任務for i in [email protected] [email protected] [email protected] [ema

ssh遠端執行nohup命令不退出

Linux系統下,使用預設使用者root。遠端target機器的主目錄下有個指令碼test.sh,可執行許可權,內容只有一條命令:sleep 10 在本地機器上執行 ssh target "nohup ./test.sh &",結果ssh不立即退出,等test.sh

ssh 遠端執行遠端機上的指令碼或命令

單命令執行: ssh [email protected] "cd /home ; ls" 今天 遠端執行命令發現了一個問題: 當執行下面命令 ssh -o ConnectTimeout=60 -qn [email protected] "cd

ssh遠端執行命令退出

問題描述:         shell指令碼中需要用ssh遠端到其他伺服器執行命令,但是執行完成不返回。 解決方法: ssh [email protected]IP > /dev/null 2>&1 << EOF     rm -

sed -i命令詳解及入門攻略

sed -i命令詳解 sed入門詳解教程     sed 是一個比較古老的,功能十分強大的用於文字處理的流編輯器,加上正則表示式的支援,可以進行大量的複雜的文字編輯操作。sed 本身是一個非常複雜的工具,有專門的書籍講解 sed 的具體用法,但是個人覺得沒有必要去學習

sshxcute --java遠端執行linux/unix命令的工具類

原文地址:https://www.ibm.com/developerworks/cn/opensource/os-sshxcute/ ----------------------------------------------------------------------

Java實踐 — SSH遠端執行Shell指令碼

1. SSH簡介         SSH是Secure Shell的縮寫,一種建立在應用層和傳輸層基礎上的安全協議。SSH在連線和傳送過程中會加密所有資料,可以用來在不同系統或者伺服器之間進行安全連線。SSH提供兩種的安全驗證方式:基於密碼的認證和基於密匙的認證。其中,基於

Linux下利用ssh遠端檔案傳輸 傳輸命令 scp

在linux下一般用scp這個命令來通過ssh傳輸檔案。一、scp是什麼?  scp是secure copy的簡寫,用於在Linux下進行遠端拷貝檔案的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨伺服器,而且scp傳輸是加密的。可能會稍微影響一下速度。  二、scp有什麼用?  1、我們需要

[隨筆] ssh遠端執行任務

SSH 是 Linux 下進行遠端連線的基本工具,但是如果僅僅用它來登入那可是太浪費啦!SSH 命令可是完成遠端操作的神器啊,藉助它我們可以把很多的遠端操作自動化掉!下面就對 SSH 的遠端操作功能進行一個小小的總結。遠端執行命令如果我們要檢視一下某臺主機的磁碟使用情況,是不

Linux SSH遠端檔案/目錄傳輸命令scp

傳檔案 scp -P 29031 /root/activator.zip root@**:/root/activator.zip 傳資料夾 scp -P 2222 -r /root/lnmp0.4

sed 處理替換字元的特殊字元

今天編寫shell程式時遇到了一個關於sed命令的問題。問題簡化如下。 文字檔案1.txt中包含字串[:50] ~/Documents/books/linux/test$:cat 1.txt [:50] 願意想將[:50]替換為[50:100],指令碼如下:~/Docu

python執行sql語句時所傳引數含有引號

  在編寫自己的程式時,需要實現將資料匯入資料庫,並且是帶引數的傳遞。 執行語句如下:   sql_str = "INSERT INTO teacher(t_name, t_info, t_phone, t_email) VALUES\