如何使用curl和grep命令抓取网站的头部部分?

如何使用curl和grep命令抓取网站的头部部分?

我正在参加 Linux+ 期中考试,我遇到了一个问题,我应该复制包含标签的头部部分并将其输出到文件中。我的期中考试将于 5 日到期,因此如果有人向我展示在 grep 头部部分和标签时使用的正确代码,那将会非常有帮助。我尝试过: curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt但是当我cat该文件时,它会说<head>,不包括头部或标签。那么我应该输入什么才能获得文件的正确输出呢?

答案1

这比你想要做的要复杂一些。

首先,您的命令存在一些语法问题。这curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt应该是:

curl www.hackthissite.org | grep "<head>" > ~/data/public/myfirstname\ mylastname/head.txt

但即使它不会做你想要的事情,因为你只是 grep 头部开始标签,而不是它和结束标签之间的内容。

我想出了这个:

curl www.hackthissite.org > TEMPORARYFILE.txt; grep -A $(($(grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1) - $(grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1))) "<head>" TEMPORARYFILE.txt > ~/data/public/myfirstname\ mylastname/head.txt; rm TEMPORARYFILE.txt

所以,按部分来说:

grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1

这将获取结束标记所在的行号。这同样适用于grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1,但对于开始标签。

然后我们有$(($(grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1) - $(grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1))),它应该计算开始标签和结束标签之间有多少行。

-A它与选项一起使用grep,它使我们能够控制要打印的匹配项后的行数。因此它将搜索起始头标签并打印它和结束标签之间的所有行。

答案2

使用呆呆:

curl -s www.hackthissite.org | awk '/<\<head>/,/<\/head>/ {print}'

相关内容