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 tr
electró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.awk
está trabajando, pero dando duplicados tratar de pasar la salida de su awk desort -u
conseguirlos distintaRespuestas:
Si solo quieres
...
de todo<tr>...</tr>
haz:grep -o '<tr>.*</tr>' HTMLFILE | sed 's/\(<tr>\|<\/tr>\)//g' > NEWFILE
Para multilínea hacer:
tr "\n" "|" < HTMLFILE | grep -o '<tr>.*</tr>' | sed 's/\(<tr>\|<\/tr>\)//g;s/|/\n/g' > NEWFILE
Verifique 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
. Elbla
no 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
sed
yawk
no son adecuados para esta tarea, debería usar un analizador html adecuado. Por ejemplohxselect
de w3.org:fuente
hxselect
hace 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 quehxselect
es un buen término medio entresed
/awk
y las librerías de analizador.hxselect
ve bien, definitivamente lo explorará más. Gracias.hxnormalize
se encarga de archivos html / xml mal formados.Si
ruby
está disponible, puede hacer lo siguiente¿Dónde
file
está su archivo html de entrada? El comando ejecuta un Ruby one-liner. En primer lugar, se lee todas las líneas defile
y 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 manejartr
etiquetas 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
ruby
y hace que el comando sea más simple.-rnokogiri
carga Nokogiri.Nokogiri::HTML(readlines.join)
lee todas las líneas defile
.xpath("//tr")
selecciona cadatr
elemento ymap { |e| e.content }
selecciona el contenido de cada elemento, es decir, lo que está entre<tr>
y</tr>
.fuente
grep
Para recuperar contenido dentro de la
tr
etiqueta en varias líneas, páseloxargs
primero, por ejemplo:Para devolver solo HTML interno, use:
Verifique la sintaxis para
perlre
patrones extendidos .Nota: Para un rendimiento más rápido, puede considerar
ripgrep
cuál tiene una sintaxis similar.fuente
pup
Ejemplo 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
:xpup
Ejemplo de uso
xpup
para 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