2011-09-08 80 views
0

我試圖使用sed從文件/root/.ssh/authorized_keys中刪除給定行$ 2。這是我正在運行的命令,不幸的是,它並未刪除該行。任何想法我做錯了什麼?使用Sed從文本文件中刪除一行

sed -i '/$2/d' /root/.ssh/authorized_keys 
+0

您是否看到錯誤訊息?你有寫入權限的文件? –

回答

2

$2將不會被其單引號內的值所取代。應該使用雙引號。

+0

sed -i「/ $ 2/d」/root/.ssh/authorized_keys – teambob

+0

從sed獲取錯誤。 'sed:-e表達式#1,字符41:未知命令:'3''可能是因爲公鑰,它有特殊的sed字符。有沒有辦法引用它? – Justin

+3

使用非base64有效的字符作爲sed的分隔符,像這樣的東西應該可以工作:sed -i「\,$ 2,d」 – holygeek

0

您還可以使用shell

while read -r line 
do 
    case "$line" in 
    *"$2"*) continue;; 
    *) echo "$line" ;; 
    esac 
done </root/.ssh/authorized_keys> tempfile 
mv tempfile /root/.ssh/authorized_keys 
+2

更像'fgrep -v「$ 2」authorized_keys' ...! – tripleee

+0

對於那些冷靜下來的人,確保你知道你爲何倒下。 –

+0

@tripleee,你可能想把這個評論作爲答案。這是我在這裏看到的最好的答案。 –

1

發佈非sed的答案由格倫·傑克曼的建議。 Tom Zych已經發布了基本的「正確答案」;還請注意holygeek的評論。

mv authorized_keys authorized_keys~ 
fgrep -v "$2" authorized_keys~ >authorized_keys 

你或許可以沒有臨時文件,但我不在我的電腦上,所以我現在玩的很安全。