Como capturar a seção head de um site usando o comando curl e grep?

0
Estou pegando meu Linux + midterm e estou preso em uma pergunta onde eu deveria copiar a seção principal, incluindo as tags e enviá-lo para um arquivo. Meu prazo final está marcado para o dia 5, então seria realmente útil se alguém me mostrasse o código correto a ser usado quando buscasse a seção principal e as tags. Eu tentei: curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt , mas tudo o que diria quando eu cato o arquivo é <head> , não inclui a seção principal ou tag. Então, o que devo digitar para obter a saída correta para o arquivo?

    
por Omar 04.11.2016 / 01:15

2 respostas

1

É um pouco mais complexo do que você está tentando fazer.

Primeiro, existem alguns problemas de sintaxe no seu comando. Este curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt deve ser:

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

Mas mesmo assim não faria o que você quer, porque você está apenas ganhando a tag de abertura da cabeça, mas não o que fica entre ela e a tag de fechamento.

Eu inventei isso:

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

Então, por partes:

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

Isto irá obter o número da linha onde está a tag de fechamento. O mesmo se aplica a grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1 , mas para a tag de abertura.

Em seguida, temos $(($(grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1) - $(grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1))) , que deve calcular quantas linhas existem entre a tag de abertura e a tag de fechamento.

Isso é usado com a opção -A de grep , o que nos dá o controle de quantas linhas depois da correspondência queremos imprimir. Então, ele procurará pela tag de abertura e imprimirá todas as linhas entre ela e a tag de fechamento.

    
por 04.11.2016 / 01:40
1

Usando o gawk:

curl -s www.hackthissite.org | awk '/<\<head>/,/<\/head>/ {print}'
    
por 04.11.2016 / 02:01