
Estoy tomando mi examen parcial de Linux+ y estoy atascado en una pregunta en la que se supone que debo copiar la sección principal, incluidas las etiquetas, y enviarla a un archivo. Mi examen parcial vence el día 5, por lo que sería de gran ayuda si alguien me mostrara el código correcto para usar al buscar la sección principal y las etiquetas. Lo intenté: curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt
pero todo lo que dice cuando cato el archivo es <head>
no incluye la sección de encabezado ni la etiqueta. Entonces, ¿qué debo escribir para obtener el resultado correcto en el archivo?
Respuesta1
Es un poco más complejo de lo que estás intentando hacer.
Primero, hay algunos problemas de sintaxis en su comando. Esto curl www.hackthissite.org: grep "<head> > ~/data/public/myfirstname\ mylastname/head.txt
debería ser:
curl www.hackthissite.org | grep "<head>" > ~/data/public/myfirstname\ mylastname/head.txt
Pero a pesar de que no haría lo que quieres, porque solo estás buscando la etiqueta de apertura de la cabeza, pero no lo que se encuentra entre ella y la etiqueta de cierre.
Se me ocurrió esto:
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
Entonces, por partes:
grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1
Esto obtendrá el número de la línea donde está la etiqueta de cierre. Lo mismo se aplica a grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1
, pero para la etiqueta de apertura.
Luego tenemos $(($(grep -n "</head>" TEMPORARYFILE.txt | cut -d: -f1) - $(grep -n "<head>" TEMPORARYFILE.txt | cut -d: -f1)))
, que se supone que calcula cuántas líneas hay entre la etiqueta de apertura y la etiqueta de cierre.
Esto se usa con la -A
opción de grep
, que nos da control de cuántas líneas después de la coincidencia queremos imprimir. Entonces buscará la etiqueta principal de apertura e imprimirá todas las líneas entre ella y la etiqueta de cierre.
Respuesta2
Usando mirar boquiabierto:
curl -s www.hackthissite.org | awk '/<\<head>/,/<\/head>/ {print}'