bash远程ssh更新追加替换



我可以从本地局域网上的另一台Linux/Ubuuntu机器成功地ssh到远程局域网上的远程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的问题。

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追加到文件中。


最新更新