【问题标题】:bash remote ssh update append replacebash 远程 ssh 更新追加替换
【发布时间】:2018-11-24 09:16:05
【问题描述】:

我可以从位于本地 LAN 上的另一台 Linux/Ubuntu 机器成功 ssh 到位于远程 LAN 上的远程 Linux/Ubuntu 机器,我还可以使用示例将我想要的文件附加到远程机器上的新数据中:

RET_IP="111.111.111.111"
HOSTNAME=system host name
PORT="111"
DEST_FILE="/etc/hosts_2"
echo "$RET_IP     $HOSTNAME" | ssh -p  $PORT root@hostname "cat >> $DEST_FILE"

文件内容代表一个 /etc/hosts 文件。我不知道该怎么做是如何替换 IP 主机名的行。 hosts_2 文件中可能有多个条目,甚至一些条目具有相同的 IP 地址,只是主机名不同,我想找到带有主机名“X”的行并替换它,或者如果该主机名“X”不存在,我想要使用新行添加/附加 hosts_2 文件。

我不知道这是否可以远程进行。也许远程是不可能的。我的搜索没有找到我需要的东西,尽管 sed 可能有一些东西。

【问题讨论】:

    标签: bash ssh replace append


    【解决方案1】:
    IP="111.111.111.111"
    ssh_system_hostname="whatever"
    new_hostname="system host name"
    old_hostname="X"
    port="111"
    dest_file="/etc/hosts_2"
    ssh -p $port root@$ssh_system_hostname -i "grep \"$IP     $old_hostname\" $dest_file
        && sed -ie \"s:$IP     $old_hostname:$IP     $new_hostname:g\" $dest_file
        || echo \"$IP     $new_hostname\" >> $dest_file"
    

    让我知道这是否有效。我不完全确定我是否正确地转义了双引号。

    解释:你正常ssh,然后你用grep检查文件中是否存在该行。如果成功,你用 sed 替换旧的东西,然后用该文件中的新东西替换它。如果 grep 失败(或者如果 grep 成功并且 sed 以某种方式失败),则使用 echo 附加到文件。


    【讨论】:

    • 嗨 Jeremy,我给了它code TEST_IP="111.111.111.111" TEST_HOSTNAME="$HOSTNAME" port="222" IP="222.222.222.222" old_hostname="nanoPCT4" new_hostname=" nanoPCT4" dest_file="etc/hosts_2" $new_hostname="Test_Host" 和 ssh -p $port root@${dUSER[${x}]} -i "grep \"$TEST_IP $old_hostname\" $dest_file && sed -即 \"s:$TEST_IP $old_hostname:$IP $new_hostname:g\" $dest_file || echo \"$IP $new_hostname\" >> $dest_file" 并且 ssh 没问题,但返回:
    • nanoPCT4=Test_Host: command not found 警告:身份文件 grep "111.111.111.111 nanoPCT4" /etc/hosts_2 && sed -ie "s:111.111.111.111 nanoPCT4:222.222.222.222 nanoPCT4:g" /等/hosts_2 || echo "222.222.222.222 nanoPCT4" >> /etc/hosts_2 不可访问:没有这样的文件或目录。
    • 这两个都从命令行工作: echo "333.333.333.333 nanoPCT4" >> /etc/hosts_2 sed -ie "s:333.333.333.333 nanoPCT4:444.444.444.444 nanoPCT4:g" /etc /hosts_2
    • 这在命令行也可以正常工作。 grep "111.111.111.111 nanoPCT4" /etc/hosts_2 && sed -ie "s:333.333.333.333 nanoPCT4:444.444.444.444 nanoPCT4:g" /etc/hosts_2 ||回声“333.333.333.333 nanoPCT4”>> /etc/hosts_2
    • 我能够使用 -ssh 凭据远程登录并成功执行 grep "111.111.111.111 nanoPCT4" /etc/hosts_2 && sed -ie "s:333.333.333.333 nanoPCT4:444.444.444.444 nanoPCT4 :g" /etc/hosts_2 ||从命令行回显“333.333.333.333 nanoPCT4”>> /etc/hosts_2。我就是不能同时做这一切。
    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多