Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Afkael en 18 Noviembre 2015, 17:03 pm



Título: (BATCH) Eliminar lineas que NO contengan ciertas palabras..
Publicado por: Afkael en 18 Noviembre 2015, 17:03 pm
Hola, tengo un archivo de texto del que quiero eliminar todas las filas que NO contengan alguna de las siguientes palabras..

* "Fecha de presentaci"
* "Liq. N"
* "Venta en"
* "Ventas en"
* "Venta Tj"
* "Ventas Tj"

esas palabras no necesariamente estan al comienzo de la linea..

Hace muchisimo tiempo vengo renegando con ésto.. y sencillamente no encuentro la forma!

Gracias!!!


Título: Re: (BASH) Eliminar lineas que NO contengan ciertas palabras..
Publicado por: yMk369 en 19 Noviembre 2015, 03:25 am
Te recomiendo SED, es una Bestia (por la cantidad de parámetros y opciones, ademas de que lo puedes combinar con mas tuberías).

Bien comencemos:

uso
sed  ComandosSed  archivo

De la siguiente expresión:

Código:
sed '/palabra/!d' ejemplo.txt > ejemplo2.txt

/palabra/ ---> palabra a buscar, (OJO: como es una cadena va entre slash)

d              --->Borrar una linea

!               --->Negación

>              --->Salida estándar (stdout)

Ahora lo explicare:

 sed busca conciencias con "palabra" y borra esa linea, no espera borra todo lo demás menos esa linea del archivo ejemplo.txt y lo manda al archivo ejemplo2.txt

(esto es conveniente ya que ar conservar el original)

Me gustaría, que tuvieses muchas dudas y así poder explayarnos con infinidad de opciones.
Saludos-





Título: Re: (BASH) Eliminar lineas que NO contengan ciertas palabras..
Publicado por: Afkael en 19 Noviembre 2015, 16:23 pm
La verdad es que no se nada de programación.. lo que hago es agarrar códigos que encuentro en internet con un propósito similar y lo adapto a mis necesidades..

Para éste caso venia usando el comando findstr y copiando las lineas en las que se encontraban las palabras clave a otro archivo.. asi:

Código:
(Type "file.txt" | Findstr "^Liq ^Fecha Venta")>"outputFile.txt"

Pero toma datos que no son los que busco y no puedo precisar una cadena más especifica por los espacios..

Por otro lado prové con agregando /c pero no me funcionó (me sigue tomando las palabras por separado) y no encontré como pasarle más de un objetivo de busqueda..

Si alguien puediera ayudarme con el código, tanto con findstr o sed, me seria de gran utilidad


Título: Re: (BASH) Eliminar lineas que NO contengan ciertas palabras..
Publicado por: explorer en 20 Noviembre 2015, 07:23 am
Código:
egrep -v "Fecha de presentaci|Liq[.] N|Ventas? en|Ventas? Tj" archivo.txt > nuevo_archivo.txt


Título: Re: (BASH) Eliminar lineas que NO contengan ciertas palabras..
Publicado por: yMk369 en 20 Noviembre 2015, 23:09 pm
Bash

Bash (Bourne again shell) es un programa informático, cuya función consiste en interpretar órdenes, y un lenguaje de programación de consola. Está basado en la shell de Unix y es compatible con POSIX.

https://es.wikipedia.org/wiki/Bash


No digo, que bash no se pueda interpretar en windows,

ahora bien, ¿que SO, utilizas?, por que creo que solo estamos dando patadas de ahogado.


Título: Re: (BASH) Eliminar lineas que NO contengan ciertas palabras..
Publicado por: Afkael en 23 Noviembre 2015, 13:59 pm
Bash

Bash (Bourne again shell) es un programa informático, cuya función consiste en interpretar órdenes, y un lenguaje de programación de consola. Está basado en la shell de Unix y es compatible con POSIX.

https://es.wikipedia.org/wiki/Bash


No digo, que bash no se pueda interpretar en windows,

ahora bien, ¿que SO, utilizas?, por que creo que solo estamos dando patadas de ahogado.

Uops!!! en realidad quise poner Batch, es un archivo.bat que ejecuto en la misma carpeta en que están los archivos de texto a procesar. Ahora lo edito..


Título: Re: (BATCH) Eliminar lineas que NO contengan ciertas palabras..
Publicado por: daryo en 29 Noviembre 2015, 02:21 am
las soluciones que estan dando son para bash no batch xD


Título: Re: (BATCH) Eliminar lineas que NO contengan ciertas palabras..
Publicado por: explorer en 30 Noviembre 2015, 07:05 am
Se daba por sobreentendido que si estamos en un foro de hackers, estaría usando un Linux o similar, no el anciano Windows ;)