Quiero recuperar lo que sea que esté entre estas dos etiquetas <tr> </tr>- de un documento html. Ahora no tengo ningún requisito html específico que garantice un analizador html. Simplemente necesito algo que coincida <tr>y </tr>consiga todo en el medio y podría haber múltiples correos trelectrónicos. Intenté awk, que funciona, pero por alguna razón termina dándome duplicados de cada fila extraída.
awk '
/<TR/{p=1; s=$0}
p && /<\/TR>/{print $0 FS s; s=""; p=0}
p' htmlfile> newfile
¿Como va esto?
shell-script
text-processing
sed
awk
html
TechJack
fuente
fuente

'/<tr/{p=1}; p; /<\/tr>/{p=0}'. Publique alguna entrada de ejemplo y salida esperada si no funciona.awkestá trabajando, pero dando duplicados tratar de pasar la salida de su awk desort -uconseguirlos distintaRespuestas:
Si solo quieres
...de todo<tr>...</tr>haz:grep -o '<tr>.*</tr>' HTMLFILE | sed 's/\(<tr>\|<\/tr>\)//g' > NEWFILEPara multilínea hacer:
tr "\n" "|" < HTMLFILE | grep -o '<tr>.*</tr>' | sed 's/\(<tr>\|<\/tr>\)//g;s/|/\n/g' > NEWFILEVerifique el ARCHIVO HTML primero del carácter "|" (no habitual, pero posible) y si existe, cambie a uno que no existe.
fuente
echo "bla<tr>foo</tr>bla<tr>bar</tr>bla" | grep -o '<tr>.*</tr>' | sed 's/\(<tr>\|<\/tr>\)//g'dafooblabar. Elblano debería estar allí?grep -Po '<tr>.*?</tr>'devolvería un resultado por línea en el caso de @ NN, pero no es portátil.Tiene un requisito que garantiza un analizador HTML: necesita analizar HTML. El HTML :: TreeBuilder de Perl , BeautifulSoup de Python y otros son fáciles de usar, más fáciles que escribir expresiones regulares frágiles y complejas.
o
fuente
sedyawkno son adecuados para esta tarea, debería usar un analizador html adecuado. Por ejemplohxselectde w3.org:fuente
hxselecthace un trabajo bastante bueno con documentos html / xml bien formados. Además, es más rápido de usar que perl, python y otros. Creo quehxselectes un buen término medio entresed/awky las librerías de analizador.hxselectve bien, definitivamente lo explorará más. Gracias.hxnormalizese encarga de archivos html / xml mal formados.Si
rubyestá disponible, puede hacer lo siguiente¿Dónde
fileestá su archivo html de entrada? El comando ejecuta un Ruby one-liner. En primer lugar, se lee todas las líneas defiley se une a ellos en una cadena,readlines.join. Luego, a partir de la cadena se selecciona entre nada (pero sin incluir)<tr>y<\/tr>que es uno de los personajes o más, independientemente de los saltos de línea,[/(?<=<tr>).+(?=<\/tr>)/m]. Luego, elimina cualquiera<tr>o</tr>de la cadenagsub(/<\/?tr>/, "")(esto es necesario para manejartretiquetas anidadas ). Por último, se imprime la cadena,puts.Dijiste que un analizador html no está garantizado para ti, pero es muy fácil de usar con Nokogiri
rubyy hace que el comando sea más simple.-rnokogiricarga Nokogiri.Nokogiri::HTML(readlines.join)lee todas las líneas defile.xpath("//tr")selecciona cadatrelemento ymap { |e| e.content }selecciona el contenido de cada elemento, es decir, lo que está entre<tr>y</tr>.fuente
grepPara recuperar contenido dentro de la
tretiqueta en varias líneas, páseloxargsprimero, por ejemplo:Para devolver solo HTML interno, use:
Verifique la sintaxis para
perlrepatrones extendidos .Nota: Para un rendimiento más rápido, puede considerar
ripgrepcuál tiene una sintaxis similar.fuente
pupEjemplo usando
pup(que usa selectores CSS ):Para imprimir sólo texto sin etiquetas, utilice:
pup -f myfile.html tr text{}.Aquí hay algunos ejemplos con
curl:xpupEjemplo de uso
xpuppara el análisis HTML / XML (que admite XPath):fuente
si es solo una lista rápida de
<tr>s, esto podría ayudar:aclamaciones
fuente