Linux en Espanol
 
Como borrar texto innecesario con grep? (tema #24996)
Publicar nuevo tema  Responder al tema    Foros de discusión -> Programación
Autor Mensaje
Anonymous
Forista
Registrado: 2003-10-21
Mensajes: 11749

Publicado: 2014-05-08 19:02:00    Asunto: Como borrar texto innecesario con grep?

Buenas, tengo texto innecesario en miles de archivos y necesito borrar dicho texto de tales archivos.
Les doy un ejemplo:

----------------------------------------------------
No No No No No No No No No
No No No No No No No No No
Texto innecesario

Texto Importante
Este Texto es importante y necesito conservarlo
---------------------------------------------------

Necesito borrar todo el texto que hay antes de la linea Texto Innecesario. Tambien la linea
Texto innecesario debe ser borrada inclusive.

Como puedo hacer dicho comando y que se efectue en todos los archivos de un directorio, desde ya
muchas gracias
Mr. Inalambrico
Forista


Registrado: 2005-03-31
Mensajes: 684

Publicado: 2014-05-19 07:26:09    Asunto:

Prueba con la opci?n "-v"

Con ella lograras un Match inverso, la salida podr?as exportarla a un archivo.
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2014-05-19 21:57:59    Asunto:

Hola.

Tal vez esto te valga como primera aproximaci?n:
Sea un fichero "datos" que contiene 9 l?neas. Por comodidad cada l?nea tiene escrito su n?mero, pero con letras. Queremos buscar la l?nea que dice "cuatro" y sacar a un fichero llamado "salida" desde la siguiente hasta el final.
Vemos el fichero de entrada:
[code:1:4c9272d7fd]usuario@sabayon /tmp/ejemplo $ cat datos
primera
segunda
tercera
cuarta
quinta
sexta
septima
octava
novena y fin[/code:1:4c9272d7fd]
Instrucci?n a ejecutar:
[code:1:4c9272d7fd]usuario@sabayon /tmp/ejemplo $ tail -n $(($(wc -l < datos)-$(cat datos |grep -n cuarta | awk -F ':' '{print $1}'))) datos > salida[/code:1:4c9272d7fd]
Vemos el resultado:
[code:1:4c9272d7fd]usuario@sabayon /tmp/ejemplo $ cat salida
quinta
sexta
septima
octava
novena y fin[/code:1:4c9272d7fd]
Aunque m?s c?modo de entender y sobre todo de mantener en el futuro es hacerlo en un script con las fases claras y comentarios. As?, en una l?nea es muy compacto pero cuando se quiere modificar algo a veces l?a un poco.
Lo mismo, pero m?s claro es as?:[code:1:4c9272d7fd]
#!/bin/bash
# Estas tres variables deber?an ser cambiadas por par?metros para mayor generalidad y reusabilidad
ENTRADA=datos
SALIDA=salida
BUSCAME=cuarta

#Cantidad de l?neas del fichero de entrada
TAMANO=$(wc -l < $ENTRADA)

#Posici?n de la l?nea buscada
POSICION=$(cat $ENTRADA |grep -n $BUSCAME | awk -F ':' '{print $1}')

#Lineas a sacar
SACAR=$(($TAMANO-$POSICION))

#Extraer parte seleccionada
tail -n $SACAR $ENTRADA > $SALIDA[/code:1:4c9272d7fd]

Saludos





La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute",
el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute,
the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries