在远程系统上使用sed命令

时间:2017-05-31 19:40:10

标签: shell unix

我在本地计算机上使用以下命令,它给出了预期的结果:

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

当我使用相同的命令(仅更改'到")到远程系统中存在的同一文件时,我没有得到任何输出。

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

请帮我纠正错误。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

"'在bash中是不同的东西,它们不可互换(它们在许多语言中不可互换,但差异更微妙)单引号意味着&# 39;假装里面的所有东西都是一个字符串'。唯一可以解释的是下一个单引号。

双引号允许bash解释

中的内容

例如,

echo "$TERM"

echo '$TERM'

返回不同的东西。

(未经测试)您应该能够使用单引号并转义内部单引号:

ssh remote-system&sed -n \' s / ^ fname(。)"。 / \ 1 / p \&#39 ; file.txt的'

您似乎可以发送包含'"'"'序列的单引号(来自this question

所以:

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

如果我ssh到localhost,这会在我的机器上运行,因为file.txt是空的,所以没有输出,但它是一个概念验证。

或者 - 你能用交互方式/与heredoc进行ssh会话吗?

ssh remote-system
[sed command]
exit

或(再次未经测试,查找heredocs获取更多信息)

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