2017-10-05 93 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' –