shell script sed截取网址 问题

zzytiger 2010-05-29 01:24:46
问题。。截取网址 只用 sed

http://linux.pacific.net.au/linux/packman/suse/10.2/repodata/repomd.xml // 这样的网址 要变成 下面一行的样子

我想要这样的:
linux.pacific.net.au


目前的问题是 http:// 被截掉了。。但是 后面 "/" 斜杠。。我始终截取不掉。。结果带了多余的 我不想要的东西

我写的代码 出来的是这样的效果:

linux.pacific.net.au/linux/packman/suse/10.2/repodata/repomd.xml



网址文件:


1183245989.174 0.129 137.157.56.174 200 1277 GET http://linux.pacific.net.au/linux/packman/suse/10.2/repodata/repomd.xml"text/xml"
1183245989.254 0.059 137.157.56.174 200 1277 GET http://linux.pacific.net.au/linux/packman/suse/10.2/repodata/repomd.xml"text/xml"
1183245989.264 0.009 137.157.56.174 200 2259 GET http://linux.pacific.net.au/linux/packman/suse/10.2/repodata/repomd.xml.key "text/xml"
1183245989.324 0.049 137.157.56.174 200 1175 GET http://linux.pacific.net.au/linux/packman/suse/10.2/repodata/repomd.xml.asc "text/plain"
1183245990.463 1.018 137.157.56.174 200 2962288 GET http://linux.pacific.net.au/linux/packman/suse/10.2/repodata/filelists.xml.gz "text/xml"
1183245991.522 0.950 137.157.56.174 200 2265658 GET http://linux.pacific.net.au/linux/packman/suse/10.2/repodata/primary.xml.gz "text/xml"
1183245991.961 0.079 137.157.56.174 200 1277 GET http://linux.pacific.net.au/linux/packman/suse/10.2/repodata/repomd.xml"text/xml"
1183327698.250 2.568 137.157.56.3 200 57891 GET http://csc3-2004-crl.verisign.com/CSC3-2004.crl "application/pkix-crl"
1183328737.107 0.570 137.157.56.2 301 777 GET http://www.starnet.com/expiredialog/demo.php?product_name=xwin32&time_remain=1800&version=8.0.2216&locale=en_AU&w32iso639ulang=en&uuid={dfe167ce-f51c-4fd4-af80-25f31246f6bc} "text/html"
1183328737.908 0.781 137.157.56.2 200 5696 GET http://www.starnet.com/expiredialog/demo.php/xwin32/1800?version=8.0.2216&locale=en_AU&w32iso639ulang=en&uuid=%7bdfe167ce-f51c-4fd4-af80-25f31246f6bc%7d "text/html"






我的语句。


cat sample-set.log | sed -n "s/.* GET http:\/\/\(.*\)\/.* .*/\1/p"


这样出来之后虽然 再 cut 就可以解决问题。。但是一个 sed 应该也可以的吧
...全文
219 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
steptodream 2010-05-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zzytiger 的回复:]

好吧。
[^/:] 就可以解决了。。
[/Quote]
汗 我们的解法都没考虑周全
zzytiger 2010-05-29
  • 打赏
  • 举报
回复
好吧。
[^/:] 就可以解决了。。


zzytiger 2010-05-29
  • 打赏
  • 举报
回复
呃。更正一下。。上面那个解法 也对端口号无能。。
怎么样解端口号。这个条件不是每个网址信息都包含的
文件示例如下:

1183344631.786 2.187 137.157.56.111 301 758 GET http://misc.icarusindie.com:2004/misc/SDKs//Microsoft+Platform+SDK+2003/bin/ "text/html"

Boover 2010-05-29
  • 打赏
  • 举报
回复
若是匹配lz的网址文件,则为
sed 's;.\+http://\([^/]\+\).\+;\1;'
Boover 2010-05-29
  • 打赏
  • 举报
回复
sed 's;http://\([^/]\+\).\+;\1;'

就可以匹配!
括号外的部分是必须的
这个正则表达式匹配整个字符串,但是只留下括号中的部分
zzytiger 2010-05-29
  • 打赏
  • 举报
回复
小改款。。加了 0-9 不过好像还有问题。

sed -n "s/.* GET http:\/\/\([a-zA-Z0-9.]\{1,\}\).*/\1/p" sample-set.log




另外。。这个能成功。

sed -e 's#.* http://\([^/]*\).*#\1#' sample-set.log

zzytiger 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 steptodream 的回复:]

C/C++ code

sed -n "s/.* GET http:\/\/\([a-zA-Z.]\{1,\}\).*/\1/p" sample-set.log


原因是你的\(.*\) 把后面的所有都匹配了
[/Quote]

呃。这个有严重的问题。。有的网址会被截取很多部分。

比如这。

1183703993.221 19.483 137.157.56.124 200 1939 GET http://ads1.msn.com/ads/53432/0000053432_000000000000000433675.swf?fd=rad.microsoft.com&clickTAG=http%3A//g.msn.com/0AD00050/1107871.1%3F%3FPID%3D3945527%26amp%3BUIT%3DM%26amp%3BTargetID%3D1085433%26amp%3BAN%3D153815468%26amp%3BPG%3DCMSWAP "application/x-shockwave-flash"




截取之后 只剩下 ads了。
zzytiger 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 steptodream 的回复:]

用cut不是更方便么?
cat test | cut -d"/" -f3
[/Quote]

上次用 sed 用傻了。。
不知道是该说 正则表达式强大。。还是sed强大。
steptodream 2010-05-29
  • 打赏
  • 举报
回复

sed -n "s/.* GET http:\/\/\([a-zA-Z.]\{1,\}\).*/\1/p" sample-set.log

原因是你的\(.*\) 把后面的所有都匹配了
steptodream 2010-05-29
  • 打赏
  • 举报
回复
用cut不是更方便么?
cat test | cut -d"/" -f3

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧