Eliminar linea de un archivo similar a comando GREP

Horst von Brand vonbrand en inf.utfsm.cl
Lun Ago 29 11:08:17 CLT 2005


Jesus Aneiros Sosa <aneiros en finf.ucf.edu.cu> wrote:
> On Sun, 28 Aug 2005, Horst von Brand wrote:
> > Jesus Aneiros Sosa <aneiros en finf.ucf.edu.cu> wrote:
> > > On Sat, 27 Aug 2005, Cristian Gutierrez wrote:
> > > > Hoy en la tarde, Roberto Bonvallet dijo:
> > > > > Astor Giacomo escribio:
> > > > >> On Saturday 27 August 2005 01:43, Julio Retamal Rojas wrote:
> > > > >> > Tengo un archivo que contiene 640.000 lineas y hay lineas que
> > > > >> > tienen un texto en especial y necesito hacer un proceso que busque
> > > > >> > en todo el archivo y elimine esa linea.

> > > > >> Como desagravio al pobre (y aparentemente olvidado) sed(1), me
> > > > >> permito sugerir

> > > > >>    sed '/is taked/d' xaa
> > 
> > > > > Para no quedarme atras:
> > > > >
> > > > >     vim +g,is\ taked,d +wq xaa
> > 
> > > > Y ya que el publico lo pide:

> > > >     emacs -batch -q xaa  -eval '(progn (flush-lines "is taked")(save-buffer)(kill-emacs))'

> > > Con todo respeto: la opcion con vim muy fea

> > Ni tanto... no sabia que vim acepta comandos por argumentos, yo habria
> > hecho algo del corte:

> Eso es porque ud es de la religion de emacs.

No entiendo? Use vi(1) durante mucho tiempo, y aun me manejo razonablemente
bien. Claro que el vi de BSD, no los clones actualmente en boga (que tienen
sus diferencias).

> >   (echo g/is taked/d; echo w; echo q) | ed xaa
> > 
> > o:
> > 
> >   (echo g/is taked/d; echo x) | ex xaa

> Con echo -e se ahorra los echo y el subshell.

Eso no es standard en echo(1), IIRC.

> > Si eres de la religion ed(1) o sucesores (ex(1), vi(1), etc) es logico;
> 
> No conocia esa religion, conocia el culto a vi.

Me corrijo: El culto a ed.

> > incluso mas, es simplemente el comando obvio para la tarea entre manos,
> > solo que dado de forma ligeramente inusual.

> Obvio dice ud!!??

  $ vi xaa
  g/is taked/d
  x
  $

Que tiene de no-obvio para un seguidor de vi? ed(1) no tiene comando x (ni
wq), asi que alli es:

  $ ed xaa
  g/is taked/d
  w
  q
  $

Dame comandos mas cortos para hacer eso.

>                   "Ud sabe" que eso no es filosofia UNIX: cada herramienta 
> para una funcion bien determinada y cada herramienta pequena y lo mas 
> simple posible.

Por lo que tenemos sed(1), que no es mas que un descendiente bastardo de
ed(1)... y tenemos ex(1) con sus multiples personalidades (ex, vi, view;
sin contar rex y rvi). Y para completar el cuadro, more(1), less(1),
most(1). Como si view(1) no fuera suficiente.

Si, hay una "filosofia Unix", pero esta un tanto diluida hoy. Y siempre se
dara el caso que hay traslapos entre funcionalidades.

> > >                                             y la de emacs horrible!
> > 
> > Tambien es bastante logico, si eres seguidor de la religion emacs(1).

> Teniendo en cuenta toda la "featuritis" de emacs no me parece muy logico.

No esta usando nada curioso, solo las funciones basicas.

> > >                                                                     Nada 
> > > que ver con UNIX.

> > Porque no?

> Explique arriba.

Me pican los dedos por dar una solucion en teco... pero tendria que
estudiar nuevamente esa cosa, y /tan/ ocioso no estoy ahora.

> > >                   Seria interesante saber el tiempo que les tomo a cada 
> > > uno dar con ellas para comparar con las mas "intuitivas" de grep(1) o 
> > > sed(1).
> > 
> > Diria que mas o menos el mismo tiempo.

> Tengo la impresion que no es lo que dijo uno de los autores. Me dio la
> impresion que estaban pensando en terminos de una especie de YAPH, Perl
> ofuscado o algo asi. Al menos mi respuesta con el comando w de sed(1) iba
> por ese camino.  Creo que ellos estaban tratando de "exprimir" al maximo a
> emacs o vim pero ya tenian la solucion con grep, sed o awk en mente.

POsiblemente. Pero una vez que se te ocurre hacerlo con c/u de ellos, el
tiempo para encontrar la solucion es similar. Insisto, no son cosas
marcianas, es simplemente el "comando normal, interactivo" dado de forma un
tanto inusual (uso batch, que para c/u de ellos es tambien "uso normal").
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                     Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria              +56 32 654239
Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513


Más información sobre la lista de distribución Linux