使用sed提取CentOS镜像域名

使用sed提取CentOS镜像域名,sed,centos6,Sed,Centos6,我正试图从中提取CentOS域名列表 将前缀“http://”和“ftp://”截断为第一个“/”字符,只生成 yum.phx.singlehop.com mirror.nyi.net bay.uchicago.edu centos.mirror.constant.com mirror.teklinks.com centos.mirror.netriplex.com centos.someimage.com mirror.sanctuaryhost.com mirrors.cat.pdx.edu

我正试图从中提取CentOS域名列表 将前缀“http://”和“ftp://”截断为第一个“/”字符,只生成

yum.phx.singlehop.com
mirror.nyi.net
bay.uchicago.edu
centos.mirror.constant.com
mirror.teklinks.com
centos.mirror.netriplex.com
centos.someimage.com
mirror.sanctuaryhost.com
mirrors.cat.pdx.edu
mirrors.tummy.com

我在stackoverflow中搜索sed方法,但仍有问题

我试着用sed做这个
curl”http://mirrorlist.centos.org/?release=6.4&arch=x86_64&repo=os“| sed'/:\//\//,//\//p'

但看起来它什么也没做。你能给我一些建议吗?

给你:

curl”http://mirrorlist.centos.org/?release=6.4&arch=x86_64&repo=os“| sed-e's?*://?”-e's?//.*”

您的
sed
完全错误:

  • /x/,/y/
    是一个范围。它选择多行,从一行匹配的
    /x/
    到一行匹配的
    /y/
  • p
    命令打印所选范围
由于所有线都与所使用的起点和终点图案匹配,因此您有效地选择了所有线。而且,由于默认情况下,
sed
会回显输入,
p
命令会产生重复的行(所有行打印两次)

在我的修复中:

  • 我使用了
    s???
    而不是
    s//
    ,因为这样我不需要转义模式中的所有
    /
    ,所以这样可读性更好
  • 我使用了两个带有
    -e
    标志的表达式:
    • s?*:/?
      将所有内容匹配到
      :/
      ,并将其替换为零
    • s?/.**
      匹配从
      /
      到结尾的所有内容,并将其替换为零
  • 这两个表达式按给定的顺序执行
  • 在现代版本的
    sed
    中,可以省略
    -e
    ,并用
    分隔这两个表达式。我坚持使用
    -e
    ,因为它更便于携带