2017-05-31 137 views
1

我現在用的是本地計算機上的以下命令的使用sed命令,它給了我預期的結果:遠程系統

sed -n 's/^fname\(.*\)".*/\1/p' file.txt 

當我使用相同的命令(只改爲「爲「),以相同的文件存在於遠程系統,我沒有得到任何輸出。

ssh remote-system "sed -n "s/^fname\(.*\)".*/\1/p" file.txt" 

請幫我解決此問題。感謝您的幫助。

+0

使用單引號或轉義。 '和'是不可互換的 – pvg

+0

我確實使用了單引號,但是我得到了下面的錯誤:'s'命令的RHS中'sed:-e表達式#1,char 16:無效引用\ 1 – Sanjivi

+0

請記住,ssh調用shell命令,所以你需要兩個級別的引用:一個用於本地shell,一個用於遠程shell。通常在遠程命令周圍放置單引號並且安排寫入沒有單引號的命令會更容易。 – Harini

回答

0

"'是不同的它們是不可互換的(它們在許多語言中不可互換,但差異更加微妙)單引號表示「假裝這裏的所有內容都是字符串」。唯一可以解釋的是下一個單引號。

雙引號允許bash的解釋裏面

例如東西,

echo "$TERM" 

echo '$TERM' 

返回不同的東西。

(未經測試),你應該能夠使用單引號和逃避內部單引號:

SSH遠程系統 'SED-N \' s/^ FNAME( )」/\ 1/p \ 'file.txt的'

看起來你可以與序列'"'"'(從this question

所以發送一個單引號:

ssh remote-machine 'sed -n '"'"'s/^fname\(.*\)".*/\1/p'"'"' file.txt' 

這在我的機器上運行,如果我SSH入本地,沒有輸出,因爲file.txt是空的,但它是一個概念驗證。

或者 - 您可以交互式地使用heredoc進行ssh會話嗎?

ssh remote-system 
[sed command] 
exit 

或(再次未經測試,查找更多信息here文檔)

ssh remote-system <<-EOF 
    [sed command] 
EOF 
+0

'ssh remote-system'sed -n \'s/^ fname \(。* \)「。*/\ 1/p \'file.txt''不起作用。聲明還沒有完成。 此外,我將不得不使用腳本內的聲明 – Sanjivi

+0

我編輯了一個更新,轉義引號是一個猜測,我從來沒有真正使用它們。 –

+0

謝謝布萊登。用''''替代'魔術。 – Sanjivi