2013-08-22 82 views
0

我試圖提取只有來自http://mirrorlist.centos.org/?release=6.4&arch=x86_64&repo=os的CentOS域名列表 僅僅將前綴「http://」和「ftp://」截斷爲第一個「/」字符使用sed提取CentOS鏡像域名

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

我搜索sed的方法計算器,但我仍然有問題。

我試圖用sed的
curl "http://mirrorlist.centos.org/?release=6.4&arch=x86_64&repo=os" | sed '/:\/\//,/\//p'
這樣做,但看起來並不像它做任何事情。你能給我一些建議嗎?

回答

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,因爲它更便攜。
+0

謝謝先生。它奇妙地工作。 – struct