Si ruby
está disponible, puede hacer lo siguiente
ruby -e 'puts readlines.join[/(?<=<tr>).+(?=<\/tr>)/m].gsub(/<\/?tr>/, "")' file
¿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 de file
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 cadena gsub(/<\/?tr>/, "")
(esto es necesario para manejar tr
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 Nokogiriruby
y hace que el comando sea más simple.
ruby -rnokogiri -e 'puts Nokogiri::HTML(readlines.join).xpath("//tr").map { |e| e.content }' file
-rnokogiri
carga Nokogiri. Nokogiri::HTML(readlines.join)
lee todas las líneas de file
. xpath("//tr")
selecciona cada tr
elemento y map { |e| e.content }
selecciona el contenido de cada elemento, es decir, lo que está entre <tr>
y </tr>
.
'/<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 distinta