我正在参加 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}'