Uso de grep

Imagen de odraude_k99
0 puntos

Hola!!!

Tengo un problema ya batalle toda la noche y no encutro nada de como colocar dos ER en grep.

 espero puedan ayudarme, hagan de cuenat que mi archivo principal es el sigueinte:

=====

nombre archivo "prueba "

<HEADPT><AZUL> algo uno
da
<NEGRO><10PT><B> algo dos
//fafasfas
dasavROdsdda
dasdaROROs
dasdaRO
<NEGRO><10PT><B> algo tres
dsdfdsf
sd<NEGRO><10PT><B> algo cuatro
dada<HEADPT><AZUL> algo cinco
<NEGRO><10PT><B> algo seis
daddsadyhybfnf
<HEADPT><AZUL> algo siete
dadsadgbfgb
d.ad}sadasdbgbgvcbc
<HEADPT><AZUL> algo ocho
===============

y de este archivo quiero obtener el siguiente archivo:

________________

archivo "final"

<HEADPT><AZUL> algo uno
<NEGRO><10PT><B> algo dos
<NEGRO><10PT><B> algo tres
<NEGRO><10PT><B> algo cuatro
<HEADPT><AZUL> algo cinco
<NEGRO><10PT><B> algo seis
<HEADPT><AZUL> algo siete
<HEADPT><AZUL> algo ocho

____________________

 

he usado por separadas las ER y todo bien

$ cat -n prueba | grep \<HEADPT\>\<AZUL\> > archivo1

$ cat -n prueba | grep \<NEGRO\>\<10PT\>\<B\> > archivo2

 

ahora para poner amabs ER juntas, pongo:

$ cat -n prueba | grep \<HEADPT\>\<AZUL\>\|\<NEGRO\>\<10PT\>\<B\> 

agregandole parentesis corchetas el + el * etc etc y no hallo como colocarlas, en otras ocaciones no me amrca ningun error pero no despliega nada 

 

tampoco, obvio puede ser:

$ cat -n prueba | grep \<HEADPT\>\<AZUL\>  | grep \<NEGRO\>\<10PT\>\<B\> > final

pues de lo que sale del primer grep es o l mete al segundo.

espeor se me halla entendido, y bueno alguien podria decir ve copiando linea por linea, peor el archivo este es de poco mas de 300 mil lineas asi que necesito hacerlo automaticamente.

 

algo qeu tmb se me ocurrio fue en dos archivos difernetes cada grep y com guarda la linea del cat -n, hacer un program que despeus vaya ordenadno peor es un relajo, ya que enrealidad son mas de 6 ER las que necesito emplear y pues ni dodne. porfavor alemnos un ejempo de dos expresioens regulares o com pudeo acomodar las que tengo 

GRACIAS 

 

 

 

 

 

 

Imagen de slap
+1
0
-1

Hola.
Tal como lo estabas haciendo, las líneas como:

dada<HEADPT><AZUL> algo cinco

no se filtrarían bien. La salida de grep sería la misma línea, es decir, no eliminas el "dada" que hay delante.

Una posible solución es usando egrep:

cat -n texto | egrep -o "<HEADPT><AZUL>.*|<NEGRO><10PT><B>.*"

Saludos.
slap

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de sansatan
+1
0
-1

A veces vienes con intención de ayudar y resulta que descubres lo mucho que puedes ser ayudado. No conocía egrep, gracias por mostrármelo slap.

Una pregunta. ¿Por qué no usar directamente?

egrep -o "<HEADPT><AZUL>.*|<NEGRO><10PT><B>.*" texto 

A lo mejor da lo mismo, pero si hay alguna diferencia quizá pueda seguir aprendiendo ;-)

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de odraude_k99
+1
0
-1

Primero muchas gracias!!!

si funciono, pero no se a que se debe que en el OR no hubo necesidad de poner antes la diagonal invertida (slash) '\', pues ya lo habia intentado y no tenia exito, también acabo de probar el siguiente comando y me jalo correctamente:

 

cat -n spaeng.txt | grep '<HEADPT><AZUL>\|<B><HEADPT><AZUL>'

y con comillas simple, pero creo que lo que probe buscaba solo la linea que tuviera contenida esa linea sin que le puediera agregar una ER solo la cadena, gracias funciono mejor tu propuesta!!!!

+1
0
-1

______________________________________________________
EDUARDO GRANADOS CH.
"Mi única creencia es en la Diosa Razón"
"Hay una globalización y una estandarización no de la cultura, sino de la incultura"

Joaquín Sabina

Imagen de slap
+1
0
-1

Una pregunta. ¿Por qué no usar directamente?

egrep -o "<HEADPT><AZUL>.*|<NEGRO><10PT><B>.*" texto

Sí, sansatan, es lo mismo. Usé el cat para seguir con el ejemplo que usó el usuario que puso la consulta.

Un saludo. ;)
slap

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es

Imagen de odraude_k99
+1
0
-1

porque me interesa obtener el numero de línea del archivo original

;) 

+1
0
-1

______________________________________________________
EDUARDO GRANADOS CH.
"Mi única creencia es en la Diosa Razón"
"Hay una globalización y una estandarización no de la cultura, sino de la incultura"

Joaquín Sabina

Imagen de odraude_k99
+1
0
-1

Primero muchas gracias!!!

si funciono, pero no se a que se debe que en el OR no hubo necesidad de poner antes la diagonal invertida (slash) '\', pues ya lo habia intentado y no tenia exito, también acabo de probar el siguiente comando y me jalo correctamente:

 

cat -n spaeng.txt | grep '<HEADPT><AZUL>\|<B><HEADPT><AZUL>'

y con comillas simple, pero creo que lo que probe buscaba solo la linea que tuviera contenida esa linea sin que le puediera agregar una ER solo la cadena, gracias funciono mejor tu propuesta!!!!

+1
0
-1

______________________________________________________
EDUARDO GRANADOS CH.
"Mi única creencia es en la Diosa Razón"
"Hay una globalización y una estandarización no de la cultura, sino de la incultura"

Joaquín Sabina