Foros del Web » Administración de Sistemas » Unix / Linux »

Borrar "n" linea de un fichero usando bash

Estas en el tema de Borrar "n" linea de un fichero usando bash en el foro de Unix / Linux en Foros del Web. Estoy realizando un script en bash, y me he trancado en este paso, a ver si pueden guiarme :) Este es un ejemplo del archivo ...
  #1 (permalink)  
Antiguo 16/12/2006, 12:51
Avatar de Sh4ka  
Fecha de Ingreso: marzo-2005
Mensajes: 205
Antigüedad: 19 años, 1 mes
Puntos: 0
Borrar "n" linea de un fichero usando bash

Estoy realizando un script en bash, y me he trancado en este paso, a ver si pueden guiarme :)

Este es un ejemplo del archivo que manipulo con el script:
Código:
AddModule mod_sulf.c
AddModule mod_smtp.c
AddModule module_regex.so
AddModule mod_imap.c
AddModule mod_userdir.c
AddModule module_regex.so 
Como ven, la tercera, y la última linea, son idénticas.
Lo que quiero hacer, es desde el script, poder borrar únicamente la linea nro 3 que se repite y dejar la última como esta actualmente, estuve buscando la forma de hacerlo con sed y encontre mil ejemplos, pero nada que pueda decirme como borrar cierta linea de cierto fichero.

Gracias!
  #2 (permalink)  
Antiguo 16/12/2006, 14:42
Avatar de Sh4ka  
Fecha de Ingreso: marzo-2005
Mensajes: 205
Antigüedad: 19 años, 1 mes
Puntos: 0
Re: Borrar "n" linea de un fichero usando bash

Ahora logré borrar la linea especificada con sed de la siguiente forma:

sed '3d' archivo

y el resultado es el esperado:
Código:
AddModule mod_sulf.c
AddModule mod_smtp.c
AddModule mod_imap.c
AddModule mod_userdir.c
AddModule module_regex.so 
Ahora, este es un fichero corto de ejemplo, y se con seguridad que la linea número 3 posee la cadena que quiero borrar. Pero en realidad el archivo que debe procesar el script es el httpd.conf (archivo de configuración de Apache), que posee cientos de lineas, y dadas las diferentes configuraciones en diferentes servidores, esa primera coincidencia que quiero borrar, no se encuentra siempre en el mismo numero de linea.

Para saber el número exacto de la linea que corresponde a la variable que quiero borrar uso algo como el siguiente comando:
Código:
LINEA_A_BORRAR=`grep "AddModule module_regex.so" -m1 -n /etc/httpd/conf/httpd.conf | tr -d [a-zA-Z#_.:/]`
Ese comando me devuelve solo el valor numérico de la linea que quiero borrar, por lo que he intentado correr sed con esa variable, pero no la toma:

Código:
sed '$LINEA_A_BORRARd' archivo
También he probado usando comillas dobles:
Código:
sed "$LINEA_A_BORRARd" archivo
Pero muestra todo el contenido sin borrar la linea..


¿Alguna idea de como solucionar esto ?
  #3 (permalink)  
Antiguo 18/12/2006, 08:24
Avatar de Sh4ka  
Fecha de Ingreso: marzo-2005
Mensajes: 205
Antigüedad: 19 años, 1 mes
Puntos: 0
Re: Borrar "n" linea de un fichero usando bash

Alguna ayuda por favor?
  #4 (permalink)  
Antiguo 18/12/2006, 10:06
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 19 años, 7 meses
Puntos: 47
Re: Borrar "n" linea de un fichero usando bash

Encontre esto, fijate si te sirve:
http://www.student.northpark.edu/pem...d/sed1line.txt

En uno de los ejemplos está: "Delete duplicate, nonconsecutive lines from a file."
Código:
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'
No lo probe, fijate que ande bien.
Saludos!
__________________
¡Volviendo a la programación!
  #5 (permalink)  
Antiguo 19/12/2006, 10:52
Avatar de Sh4ka  
Fecha de Ingreso: marzo-2005
Mensajes: 205
Antigüedad: 19 años, 1 mes
Puntos: 0
Re: Borrar "n" linea de un fichero usando bash

Eso no funcionó, igualmente gracias!
Tuve que agregar un comentario a la primer linea duplicada, para luego recorrer el archivo y quitar la linea no desea del output para guardar el resultado en un archivo, es una forma media "sucia" de hacerlo, pero logré lo que quería:

Código:
cat $ARCHIVO | egrep -v "linea no deseada" > $ARCHIVO.cambiado
salu2!
  #6 (permalink)  
Antiguo 17/12/2010, 08:34
 
Fecha de Ingreso: julio-2003
Ubicación: Madrid
Mensajes: 3
Antigüedad: 20 años, 9 meses
Puntos: 0
Respuesta: Borrar "n" linea de un fichero usando bash

mas sencillo es
sort -u fichero>fichero1

lo que hace es ordenarlo y quitar las lineas duplicadas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:30.