我在本地计算机上使用以下命令,它给出了预期的结果:
sed -n 's/^fname\(.*\)".*/\1/p' file.txt
当我使用相同的命令(仅更改'到")到远程系统中存在的同一文件时,我没有得到任何输出。
ssh remote-system "sed -n "s/^fname\(.*\)".*/\1/p" file.txt"
请帮我纠正错误。谢谢你的帮助。
答案 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