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