
Я сдаю свой Linux+ midterm и застрял на вопросе, где мне нужно скопировать раздел head, включая теги, и вывести его в файл. Мой промежуточный экзамен должен быть сдан 5-го числа, поэтому было бы очень полезно, если бы кто-нибудь показал мне правильный код для использования при поиске раздела head и тегов. Я попробовал: curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt
но все, что он сказал, когда я cat файл <head>
, это , не включает раздел 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
Но даже если это не сделает то, что вам нужно, потому что вы просматриваете только открывающий тег заголовка, но не то, что находится между ним и закрывающим тегом.
Я придумал следующее:
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
, которая дает нам контроль над тем, сколько строк после совпадения мы хотим напечатать. Таким образом, он будет искать открывающий тег head и напечатать все строки между ним и закрывающим тегом.
решение2
Используя gawk:
curl -s www.hackthissite.org | awk '/<\<head>/,/<\/head>/ {print}'