我试图仅从http://mirrorlist.centos.org/?release=6.4&arch=x86_64&repo=os提取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'
但看起来并没有做任何事情。你能给我一些建议吗?
答案 0 :(得分:0)
你走了:
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
因为它更便携。