用于在网页上返回域的Linux脚本

时间:2012-07-31 05:52:30

标签: linux bash

我的任务是这个问题: 编写一个bash脚本,该URL将URL作为其第一个参数,并打印出URL的HTML中每个主机/域的链接数的统计信息。

例如,如果给出像www.bbc.co.uk这样的URL,它可能会打印出类似

的内容
www.bbc.co.uk: 45
bbc.com: 1
google.com: 2
Facebook.com: 4

也就是说,它应该分析页面的HTML,拉出所有链接,检查href属性,确定哪些链接到同一个域(当然是图中的一个),哪些是外来的,然后生成本地和远程统计数据。

规则:您可以在脚本中使用任何一组标准Linux命令。您不能使用任何更高级的编程语言,如C或Python或Perl。但是你可以使用awk,sed等。

我想出了如下解决方案:

#!/bin/sh

echo "Enter a url eg www.bbc.com:"
read url
content=$(wget "$url" -q -O -)
echo "Enter file name to store URL output"
read file
echo $content > $file
echo "Enter file name to store filtered links:"
read links
found=$(cat $file | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | sort | uniq | awk '/http/' > $links)
output=$(egrep -o '^http://[^/]+/' $links | sort | uniq -c > out)
cat out

然后告诉我“我必须查看数据,然后检查您的程序是否满意地处理了所有情况。这会报告网址,但没有域名” 是否有人可以帮助我或指出我正确的方向,以便我能够实现我的目标?我缺少什么或脚本没有做什么?我以为我按要求让它工作了。

1 个答案:

答案 0 :(得分:0)

您的脚本输出为:

      7 http://news.bbc.co.uk/
      1 http://newsvote.bbc.co.uk/
      1 http://purl.org/
      8 http://static.bbci.co.uk/
      1 http://www.bbcamerica.com/
     23 http://www.bbc.com/
    179 http://www.bbc.co.uk/
      1 http://www.bbcknowledge.com/
      1 http://www.browserchoice.eu/

我认为它们的意思应该更像:

      7 news.bbc.co.uk
      1 newsvote.bbc.co.uk
      1 purl.org
      8 static.bbci.co.uk
      1 www.bbcamerica.com
     23 www.bbc.com
    179 www.bbc.co.uk
      1 www.bbcknowledge.com
      1 www.browserchoice.eu