如何将指定模式文本块及后续n行移至文件末尾并修改别名?
使用ed命令处理SSH配置文件的移动与修改需求
以下是满足你需求的ed命令示例,针对~/.ssh/config文件操作:
ed -s ~/.ssh/config <<'EOF' /^Host vps6$/ ,+3m$ $?-^Host vps6$? s/vps6/vps6-old/ wq EOF
命令解释
- 定位目标配置行:
/^Host vps6$/精准匹配以Host vps6开头的行,避免误匹配注释或其他包含vps6的内容。 - 移动配置块:
,+3m$将当前行(匹配到的Host vps6行)及其后续3行(共4行)移动到文件末尾。ed的移动操作不会产生多余换行,解决你用sed遇到的问题。 - 定位移动后的Host行:
$?-^Host vps6$?从文件末尾向前搜索最近的Host vps6行,确保准确找到刚移动的配置块的别名行。 - 修改别名:
s/vps6/vps6-old/给别名添加-old后缀。 - 保存退出:
wq保存修改并退出ed。
灵活调整后续行数
如果需要移动的后续行数不是3,只需修改,+3m$中的数字即可。比如要包含后续5行,就改成,+5m$——总移动行数为1 + 指定数字(匹配行本身+后续N行)。
测试建议
如果不确定修改效果,可以先将wq替换为p(仅打印修改后的内容,不保存),或者用ed -n ~/.ssh/config进入交互模式,逐行输入命令测试。
内容的提问来源于stack exchange,提问作者Liso
相关产品推荐
相关产品推荐

