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: