我有一个文件 ( mirrorlist.pacnew
) 包含这样的镜像:
prakhar@inS4n3 ~ $ cat /etc/pacman.d/mirrorlist.pacnew
...
## Worldwide
#Server = https://dgix.ru/mirrors/archlinux/$repo/os/$arch
#Server = http://mirror.rackspace.com/archlinux/$repo/os/$arch
## Australia
#Server = http://mirror.aarnet.edu.au/pub/archlinux/$repo/os/$arch
...
我应该选择镜子并取消注释。然而,一个工具rankmirrors
为我确定了最好的镜像,所以我sed
习惯于取消所有它们的注释。
prakhar@inS4n3 ~ $ cat /etc/pacman.d/mirrorlist.pacnew | sed -r 's/^#([^#]+)/#\1\n\1/'
...
## Worldwide
#Server = https://dgix.ru/mirrors/archlinux/$repo/os/$arch
Server = https://dgix.ru/mirrors/archlinux/$repo/os/$arch
#Server = http://mirror.rackspace.com/archlinux/$repo/os/$arch
Server = http://mirror.rackspace.com/archlinux/$repo/os/$arch
## Australia
#Server = http://mirror.aarnet.edu.au/pub/archlinux/$repo/os/$arch
Server = http://mirror.aarnet.edu.au/pub/archlinux/$repo/os/$arch
...
我保留注释行,因为 rankmirrors 打印它们并且我可以跟踪进度(它不打印它正在处理的未注释行)。
但是,我也想sed
或awk
打印每行中的服务器计数和总计数。
具体来说:
- 取消注释行,就像我在上面给出的示例一样。
- 从原始文件打印当前#Server索引的索引(不是实际的行号,因为文件包含县名、通用注释)。
最终输出看起来有点像这样:
#22/247 Server = http://mirror.aarnet.edu.au/pub/archlinux/$repo/os/$arch
Server = http://mirror.aarnet.edu.au/pub/archlinux/$repo/os/$arch
这是完整文件的副本。
编辑:
我自己也取得了一些进展,我将我的工作添加为答案,因为它实现了上述目标,但不是最佳的。