gpt4 book ai didi

linux - 如何在 shell 脚本中使用 ssh 在远程服务器上运行 sed(包括变量)

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:26 24 4
gpt4 key购买 nike

我遇到了这样的情况,我试图在 shell 脚本内的远程 shell 上运行 sed 命令,并使用动态变量,最终一次又一次地出现相同的错误。

这是 sed 命令,在本地 shell 上运行良好,没有任何错误。我经过彻底测试后使用了这个正则表达式,相信我它没有问题。

sed -i 's/  #0\t30718/ 0\t30718/' ./config.txt

尝试使用 ssh 在远程 shell 中运行它:

ssh root@sys_name sed -i 's/  #0\t30718/ 0\t30718/' /absolute-path/vconfig.txt

当我尝试使用变量运行此命令时。 (30718和文件路径是变量):

ssh root@sys_name 'sed -i "s/0\t${pe_list[0]}/#0\t${pe_list[0]}/g" $file_path'

或者像这样:

ssh root@sys_name "sed -i 's/0\t${pe_list[0]}/#0\t${pe_list[0]}/g' $file_path"

我要么收到 sed: -e expression #1, char 2: untermerated `s' command 错误,要么 sed 命令执行时产生与变量名称匹配的不需要的输出。基本上,简而言之,我想使用 ssh 在远程 shell 上执行 sed 命令,限制是整个命令是脚本的一部分,要匹配的值和文件名是该文件中的变量。

最佳答案

您在本地 shell 中设置了变量,但它不是 sed 变量,因此您应该通过用单引号关闭它来退出 sed 环境,放入变量,然后再次用单引号打开并继续 sed 操作:

sed -e 's/Red Hat/'${z}'/' /etc/redhat-release

如果您的 $z 变量包含空格,则需要用双引号括起来:

sed -e 's/Red Hat/'"${z}"'/' /etc/redhat-release

最后,当您通过 ssh 发送命令时,您还会在整个命令周围添加双引号,因此该命令中使用的所有双引号都应该转义,否则这些之间的所有内容都将在源主机上本地评估。所以这样做:

z="BLACK HAT"    
ssh root@sys_name "sed -e 's/Red Hat/'\"${z}\"'/' /etc/redhat-release"

您将得到:

BLACK HAT Enterprise Linux Server release 6.10 (Santiago)

关于linux - 如何在 shell 脚本中使用 ssh 在远程服务器上运行 sed(包括变量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53058136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com