busqueda de trozos de texto dentro de un fichero en linux

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
molaman
Forista Nuevo
Forista Nuevo
Mensajes: 2
Registrado: Sab Oct 27, 2018 3:19 am

busqueda de trozos de texto dentro de un fichero en linux

Mensaje por molaman » Sab Oct 27, 2018 3:34 am

Hola, necesitaría una ayudita para trastear con sed o grep, tal vez awk, para buscar un texto contenido dentro de un fichero de texto.
Son muchas lineas,y el texto es variable, pero siempre esta encerrado entre unas etiquetas concretas.
Lo que quiero es el texto de en medio.

Por ejemplo:
Suponiendo que es un html, querria sacar todo lo que hay encerrado en la etiqueta <style="...........;">
EL problema es que puede empezar en al columna 3, en la 5 en la 20, no se sabe. Puede tener una longitud de 10, 40, 50 caracteres, tampoco se sabe. Solo sé que quiero lo que está contenido dentro de esa etiqueta.

Haba pensado ejecutarlo mas o menos buscando <style =" y cortando a la derecha, y lo que quede, cortar a la izquierda del primer ;">
Creo que bastaría, pero no domino mucho los parametros de estos comandos

Tengo que poder ejecutarlo en bash

Gracias
Avatar de Usuario
neurus
Forista Legendario
Forista Legendario
Mensajes: 1807
Registrado: Dom Oct 10, 2004 7:00 am

Re: busqueda de trozos de texto dentro de un fichero en linux

Mensaje por neurus » Dom Oct 28, 2018 1:57 am

Código: Seleccionar todo

sed -n 's:.*<style>\(.*\)</style>.*:\1:p'
También hay una herramienta llamada xmlstarlet; probablemente te resulte más práctica para extraer contenido html.
molaman
Forista Nuevo
Forista Nuevo
Mensajes: 2
Registrado: Sab Oct 27, 2018 3:19 am

Re: busqueda de trozos de texto dentro de un fichero en linux

Mensaje por molaman » Dom Oct 28, 2018 2:51 pm

Gracias, pero creo que no me he explicado bien. Tengo que usar grep, sed o awk.

El fichero puede ser similar a esto:
<div: style="Helvet;"><posicion: "Dtor" style="2222.11;"/>@Superv <etiqueta>....</etiqueta>
<div: style="abcded;"><empleado: "id=Pepe" style="2222.11;"/>@alfabet <marca>Tipo1</marca><etiqueta>....</etiqueta>
<div: style="x_1223;"><empleado: "Id=Laura Maria " style="2222.11;"/>@pe1ar# <marca>Otra MAs</marca><etiqueta>....</etiqueta>

O sea, mas o menos es como una html, que tiene cabeceras, body y pie. En todas puede haber etiqueta <div>, por lo que no me sirve como delimitador. Tampoco me sirve buscar (Id:) porque puede estar en otros puntos del fichero. El atributo style no me indica mucho, porque puede haber varios de esos atributos en la misma linea y en muchas otras lineas.

Pero si me sirve el delimitador (<empleado ) para saber que quiero excavar en esa linea.. Puede ser que la etiqueta ocupe el segundo tag, pero tambien podria ser el 3º, el 4º; no creo que pueda encolumnar a una posicion concreta de la linea. Ademas, de esa linea quiero otros campos, que pueden estar seguidos o no, ocupar 4 8, ó 20 caracteres.

Lo que necesito es el id de la persona, con el nombre entre comillado, el comentario con @, y lo que va en la etiqueta marca:

De forma que la idea que llevo es:
. Hago grep de la etiqueta <empleado Con eso extraigo las lineas que tienen lo que busco, vuelco la linea en una variable por comodidad para las siguientes busquedas.
. Ahora, trabajando contra la variable que contiene la linea, vuelco en 3 variables lo que necesito, lo hago para no hacer un grep con multiples intrucciones, y que no sé si unas excluirian a las otras, pero que sería muy dificil de leer:
- hago grep de <empleado id: " hasta que encuentro otras comillas ", el resultado lo vuelco en una variable X1 (trabajador)
- hago grep de nuevo buscando @ (o buscando >@) hasta la siguiente "<", y cojo el texto @xxxxxx en otra variable X2, su cuenta
- hago grep de nuevo y busco el texto contenido entre <marca> y </marca> y lo vuelco en la variable X3 (linea de produccion)

Y me quedaria:
X1 X2 X3
Pepe @alfabet Tipo1
Laura Maria @pe1ar MAs

No sé si habría un método mas eficaz, pero no puedo contar columnas, porque no sé cuantas columnas hay. Tampoco sé el orden exacto de los campos que busco. Lo único que sé es que tengo que buscar varios textos y extraerlos para luego listarlos


Gracias
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje