2017-10-05 91 views
0

如何sed用字符串替换整行作为变量?如何sed用字符串替换整行作为变量?

#!/bin/bash 
ssh $1 ssh-keyscan -t rsa $1 > /tmp/$1 
RSA=$(cat /tmp/$1) 
echo $RSA 
sed -i 's:'^"$1".*':'"$RSA"':' /etc/ssh/ssh_known_hosts 
cat /etc/ssh/ssh_known_hosts | grep $1 

它将变量存储在RSA中但没有替换,不知道sed部分有什么问题。

+0

你能向我们展示一些价值观吗?你如何声称它并没有取代? – Inian

+0

$ 1是删除节点的主机名,当我执行该文件时,它具有相同的旧rsa密钥条目。 – asokan

+0

$ 1的价值是多少? – choroba

回答

2

您可以使用以下命令。

#!/bin/bash 
ssh $1 ssh-keyscan -t rsa $1 > /tmp/$1 
RSA=$(cat /tmp/$1) 
echo $RSA 
sed -i -e "/$1/ d" -e "/^$1/ a $RSA" /etc/ssh/ssh_known_hosts 
cat /etc/ssh/ssh_known_hosts | grep $1 

我根据您的要求修改,如果不存在行添加,如果它存在替换。

+0

sed:-e表达式#1,字符3:未终止的's'命令 有空白和/有在RSA令牌字符串 – asokan

+0

需要类似如果存在替换或将其添加为新的 – asokan

+0

然后,您可能需要执行两个命令。/etc/ssh/ssh_known_hosts' –