[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Nuevo desafío Sed



On Sun, Nov 12, 2006 at 01:17:11AM -0600, César Rincón wrote:
> andmarti@gmail.com wrote:
> > Será posible que sea tan jodido esto del sed? Me tiene de la cabeza.
> 
> Es así de jodido.  Es parte del encanto :)
> 
> > Lo que estaba tratando de hacer ahora es agregar una linea con el texto
> > "NUEVO" bajo la primera que cumpla con las 2 siguientes condiciones: 
> > que empiece con "COMIENZO" y que no contenga "STRING_PROHIBIDO".
> > 
> > En rigor de verdad, lo que necesito es que escriba al final de la línea que
> > encontró. Seguro que con el comando s como dijo uno de los pibes el otro día,
> > pero como ni siquiera pude hacer lo primero..
> 
> A ver si te entiendo.  Considera el siguiente script:
> 
> ------------------------------------------------
> #!/bin/sed -f
> 
> # Si la linea *no* comienza con COMIENZO,
> # imprime y vuelve al inicio del programa;
> 
> /^COMIENZO/!b
> 
> # (else) si la linea contiene PROHIBIDO,
> # imprime y vuelve al inicio del programa;
> 
> /PROHIBIDO/b
> 
> # (else) agrega " NUEVO" al final, imprime,
> # e imprime el resto del texto sin mas
> # comprobaciones.
> 
> s/$/ NUEVO/
> :a
> n
> ba
> ------------------------------------------------
> 
> O sin tanto verbo:
> 
>  sed -e '/^COMIENZO/!b' -e '/PROHIBIDO/b' -e 's/$/ NUEVO/' \
>   -e ':a;n;ba'
> 
> Si aún quieres el salto de línea, cambia " NUEVO" por "\nNUEVO".

De maravillas. Lo que no me queda claro es el último -e...
Por otro lado, como hago para que modifique el archivo directamente, y
así evitar redirecciones ">" y "mv"..? En otros casos usaba -i, pero no parece funcionar..

> > NOTA AL MARGEN: El man y la info de sed es medio chota.
> > Saludos.
> 
> La info es una referencia completa y correcta, que parece escrita para
> ser útil sólo a quien ya sabe sed en primera instancia.  O sea, estoy de
> acuerdo contigo.  Pero no me puedo imaginar cómo sería una documentación
> mejor.  Quizá es que sed es difícil de documentar.

Quizás la mejor manera es viendo ejemplos con dificultad progresiva..

> Saludos.

Gracias.
Saludos.

Andrés M.



Reply to: