如何使用sed/awk替换Ubuntu镜像源URL中未知的域名部分?
用sed或awk统一替换Ubuntu镜像源域名
方法一:使用sed命令
sed通过正则匹配精准定位各类Ubuntu官方源域名,实现全局替换:
# 预览替换效果(不修改原文件) sed -E 's/http:\/\/([a-z]+.)?archive\.ubuntu\.com\/ubuntu\/?/http:\/\/mirror.sg.gs\/ubuntu/g' sources.list
如果需要直接修改原文件并自动备份:
# 生成原文件备份(sources.list.bak),同时修改原文件 sed -i.bak -E 's/http:\/\/([a-z]+.)?archive\.ubuntu\.com\/ubuntu\/?/http:\/\/mirror.sg.gs\/ubuntu/g' sources.list
正则说明:
([a-z]+.)?:匹配可选的国家前缀(如us.、jp.),问号表示该部分可存在或不存在\/ubuntu\/?:匹配路径部分,末尾的问号兼容带斜杠(/ubuntu/)和不带斜杠(/ubuntu)的写法g:全局替换,确保一行中所有符合条件的域名都被替换
方法二:使用awk命令
awk通过字段定位(源URL是每行的第二个字段),针对性替换目标内容:
# 预览替换效果 awk '{sub(/http:\/\/([a-z]+.)?archive\.ubuntu\.com\/ubuntu\/?/, "http://mirror.sg.gs/ubuntu", $2); print}' sources.list
如果需要覆盖原文件:
awk '{sub(/http:\/\/([a-z]+.)?archive\.ubuntu\.com\/ubuntu\/?/, "http://mirror.sg.gs/ubuntu", $2); print}' sources.list > temp.list && mv temp.list sources.list
原理说明:
sub()函数在指定字段($2,即URL部分)中执行正则替换- 替换完成后打印整行,保证其他内容(如注释符号、发行版代号、仓库类型)不受影响
验证效果
替换后所有带国家前缀(us.、jp.)或默认的archive.ubuntu.com源都会被替换为mirror.sg.gs,完全匹配你给出的目标格式。
内容的提问来源于stack exchange,提问作者Liso
相关产品推荐
相关产品推荐

