You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed在authorized_keys中保留alice的最后一个公钥并删除其余?

保留authorized_keys中Alice的最后一个公钥并删除其余旧密钥

问题场景

authorized_keys文件中存在多个Alice的公钥条目,希望仅保留最后一个(最新添加的)公钥,删除所有旧的Alice公钥,且不确定旧密钥的具体数量,需要实现原地编辑文件的通用方法。

解决方案

方法一:用awk一次性处理(推荐)

这个方法可以直接遍历文件,保留所有非Alice的行,同时仅保留最后一个Alice的行,操作简洁且安全:

# 第一步:先备份原文件,防止操作失误
cp authorized_keys authorized_keys.bak

# 第二步:处理文件,保留非Alice行和最后一个Alice行
awk '/alice/{last=$0; next} {print} END{if(last) print last}' authorized_keys > temp && mv temp authorized_keys

命令解释:

  • /alice/{last=$0; next}:匹配到包含alice的行时,将该行内容存入变量last,并跳过当前行(不打印旧的Alice密钥)
  • {print}:所有不包含alice的行直接输出,保留其他用户的密钥
  • END{if(last) print last}:处理完所有行后,若存在Alice的密钥,就打印最后保存的那一行

方法二:先提取最后一个Alice密钥再替换

如果更习惯用grep和sed组合,可以分两步操作:

# 备份原文件
cp authorized_keys authorized_keys.bak

# 提取最后一个Alice的公钥内容
last_alice=$(grep -n alice authorized_keys | tail -n1 | cut -d: -f2-)

# 删除所有Alice的旧密钥,再追加最后一个密钥
sed -i '/alice/d' authorized_keys && echo "$last_alice" >> authorized_keys

命令解释:

  • grep -n alice authorized_keys:列出所有含alice的行并显示行号
  • tail -n1:取最后一行(即最新的Alice密钥)
  • cut -d: -f2-:去掉行号,仅保留公钥内容
  • sed -i '/alice/d' authorized_keys:删除文件中所有含alice的行
  • echo "$last_alice" >> authorized_keys:将最后一个Alice密钥追加到文件末尾

注意事项

  • 操作前务必备份原文件,避免数据丢失
  • 如果需要更精准匹配Alice的密钥(比如避免误匹配其他含alice字符串的行),可以修改grep的匹配规则,例如匹配行尾的注释部分:grep -E 'alice(@|\-.+)$' authorized_keys

内容的提问来源于stack exchange,提问作者vinWin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:02:44