modificar un archivo en bash

2003-03-24 Thread Rafael F. Rodríguez
Hola  a todos.

Tengo un problema ya dos semanas, y no consigo encontrar la respuesta. 
Me 
gustaría modificar el contenido de un archivo en la línea de comandos. ejem.

archivo.txt
Nombre:  cuya dirección ip es 

Pues lo que quiero es modificar  y  desde la línea de 
comando por 
otros valores.

Muchas gracias.



Re: modificar un archivo en bash

2003-03-24 Thread Mauricio Alejandro Araya Lopez
On Mon, 24 Mar 2003, Rafael F. [iso-8859-15] Rodríguez wrote:

> Hola  a todos.
Holas

> 
>   Tengo un problema ya dos semanas, y no consigo encontrar la respuesta. 
> Me 
> gustaría modificar el contenido de un archivo en la línea de comandos. ejem.

cut(1), awk(1), sed(1), bash(1).
 
>   archivo.txt
>   Nombre:  cuya dirección ip es 

Eso solo va en el archivo? Si es tan poco, puedes reescribirlo todas las 
veces completo, no hay para que modificarlo.
 
>   Pues lo que quiero es modificar  y  desde la línea de 
> comando por 
> otros valores.

Reescribelo todad las veces mejor.
> 
>   Muchas gracias.

De nada

Saludos!
-- 
Mauricio Alejandro Araya Lopez* User #249395 counter.li.org
Est.Ingenieria Civil Informatica, * Fono: +56 32 671387
Universidad Tecnica Federico Santa María  * Cel : 09 3469128
Viña del Mar, Chile.  * http://www.inf.utfs.cl/~maray



Re: modificar un archivo en bash

2003-03-24 Thread Rafael F. Rodríguez
Hola amigo.

No hombre el archivo es muucho mas largo, pero he considerado 
oportuno no 
ponerlo directamente, solo era un ejemplo.

Necesitaria un ejemplo concreto, por ejemplo:
loquesea archivo.txt var1 "esto hay que poner"
loquesea archivo.txt var2 "y aquí la otra variable"

Gracias.

El Lun 24 Mar 2003 13:03, Mauricio Alejandro Araya Lopez escribió:
> On Mon, 24 Mar 2003, Rafael F. [iso-8859-15] Rodríguez wrote:
> > Hola  a todos.
>
> Holas
>
> > Tengo un problema ya dos semanas, y no consigo encontrar la respuesta.
> > Me gustaría modificar el contenido de un archivo en la línea de comandos.
> > ejem.
>
> cut(1), awk(1), sed(1), bash(1).
>
> > archivo.txt
> > Nombre:  cuya dirección ip es 
>
> Eso solo va en el archivo? Si es tan poco, puedes reescribirlo todas las
> veces completo, no hay para que modificarlo.
>
> > Pues lo que quiero es modificar  y  desde la línea de
> > comando por otros valores.
>
> Reescribelo todad las veces mejor.
>
> > Muchas gracias.
>
> De nada
>
> Saludos!



Re: modificar un archivo en bash

2003-03-24 Thread Matías nnss
Hola:
 ¿De dónde o cómo obtienes  y ?






-- 
Atentamente, yo 
No a la invación en Irak



> Hola amigo.
>
>   No hombre el archivo es muucho mas largo, pero he considerado
>   oportuno no
> ponerlo directamente, solo era un ejemplo.
>
>   Necesitaria un ejemplo concreto, por ejemplo:
>   loquesea archivo.txt var1 "esto hay que poner"
>   loquesea archivo.txt var2 "y aquí la otra variable"
>
>   Gracias.
>
> El Lun 24 Mar 2003 13:03, Mauricio Alejandro Araya Lopez escribió:
>> On Mon, 24 Mar 2003, Rafael F. [iso-8859-15] Rodríguez wrote:
>> > Hola  a todos.
>>
>> Holas
>>
>> >Tengo un problema ya dos semanas, y no consigo encontrar la
>> >respuesta.
>> > Me gustaría modificar el contenido de un archivo en la línea de
>> > comandos. ejem.
>>
>> cut(1), awk(1), sed(1), bash(1).
>>
>> >archivo.txt
>> >Nombre:  cuya dirección ip es 
>>
>> Eso solo va en el archivo? Si es tan poco, puedes reescribirlo todas
>> las veces completo, no hay para que modificarlo.
>>
>> >Pues lo que quiero es modificar  y  desde la línea de
>> > comando por otros valores.
>>
>> Reescribelo todad las veces mejor.
>>
>> >Muchas gracias.
>>
>> De nada
>>
>> Saludos!
>
>
> --
> To UNSUBSCRIBE, email to [EMAIL PROTECTED]
> with a subject of "unsubscribe". Trouble? Contact
> [EMAIL PROTECTED]





Re: modificar un archivo en bash

2003-03-24 Thread Fernando Blat Peris
Si todo es como he entendido este script te puede funcionar:

#!/bin/bash

# $0: ejecutable
# $1: fichero 
# $2: var1 o var2
# $3: cadena a añadir

if [ $# -ne 3 ]
then
echo "Error en el numero de argumentos"
echo "Uso: $0 fichero var1|var2 cadena"
exit -1
fi

if [ $2 == "var1" ]
then 
cat $1 | awk -v texto=$3 '{print $1 " " texto " " $3 " " $4 " " 
$5 " " $6 " 
" $7 }' > $1
exit 0
fi

if [ $2 == "var2" ]
then 
cat $1 | awk -v texto=$3 '{print $1 " " $2 " " $3 " " $4 " " $5 
" " $6 " " 
texto }' > $1
exit 0
fi

Pero ten en cuenta que está muy limitado para la estructura de fichero que has 
dado, es decir, si la modificas no te servirá :S

A alguien se le ocurre algo más elegante que mi chapucilla??


-- 
Fernando Blat Peris
http://ttt.inf.upv.es/~ferblape
Polinux 
UPV - Valencia



Re: modificar un archivo en bash

2003-03-24 Thread Cesar Rincon
On Mon, 2003-03-24 at 13:41, Fernando Blat Peris wrote:
> A alguien se le ocurre algo más elegante que mi chapucilla??

Probablemente no he entendido lo que Rafael quiere, pero me suena
demasiado simple...  En fin.  Mi solución no es más elegante, pero sí
más compacta (y quizá más entendible y fácil de mantener):

Asumiendo que el archivo contiene una línea que reza literalmente
"Nombre:  cuya dirección ip es ":

---
#!/bin/bash
if [ -z "$1" -o -z "$2" ]; then
  echo "Uso: $0 nombre ip" >&2
  exit 1
fi

sed -e "s|^Nombre:  cuya dirección ip es |\
Nombre: $1 cuya dirección ip es $2|"

exit 0
---

Y lo usarías como un filtro:

  cat archivo.in | script NOMBRE 123.123.123.123 > archivo.out

O, si te interesa reemplazar el archivo, algo como

  script NOMBRE 123.123.123.123 < archivo > archivo.$$ && \
mv archivo.$$ archivo

Decía que "demasiado fácil" porque ésto es realmente un "one liner": no
es necesario hacer el script, basta con teclear la invocación a sed.

Pero bueno, seguramente no he entendido...

 -CR




Re: modificar un archivo en bash

2003-03-25 Thread Rafael F. Rodríguez
Hola a todos.

Perdonad, creo que no he sido demasiado claro. :-).

Se trata de la configuración de postfix y fetchmail, como sabeis hay 
que 
configurar varios archivos, y como la configuración, alias, etc.

Lo que prependo hacer es un scripts donde pregunte el nombre de 
dominio, los 
nombre de usuario, contraseñas... y que el script acceda a los archivos 
(plantillas previamente preparadas y colocadas en cada ruta) y modifique los 
valores que tengo por defecto. ejemplo:

---archivo main.cf--
# NOMBRE, DOMINIO(S) y RED(ES)
myhostname = 
mydomain   = 
relay  = 

# DIRECCION QUE APARECE EN EL FROM
myorigin  = $mydomain
.
.
.

# PROPIETARIO DE COLAS Y PROCESOS 
mail_owner   = postfix
setgid_group = postdrop

# TRATAMIENTO DE ALIAS
alias_database   = hash:/etc/aliases
alias_maps   = hash:/etc/aliases 

# IDENTIFICACION DE USUARIOS LOCALES
local_recipient_maps = $alias_maps unix:passwd.byname

# ENVIO EN PARALELO A UN MISMO DESTINO
local_destination_concurrency_limit   = 2 
default_destination_concurrency_limit = 10

# OTROS PARAMETROS DE CONFIGURACION
notify_classes   = resource, software, policy
transport_maps   = hash:/etc/postfix/transport
disable_vrfy_command = yes
disable_dns_lookups  = yes
relayhost= [$relay] 
message_size_limit   = 10485760
mailbox_size_limit   = 0
maximal_queue_lifetime = 5d
#maps_rbl_domains= relays.ordb.org 

# CONTROL DE CORREO ENTRANTE / SALIENTE 
mynetworks   = 
mydestination= $myhostname localhost.$mydomain $mydomain  
relay_domains= $mydestination
#smtpd_client_restrictions = reject_maps_rbl reject_unknown_client 
#smtpd_helo_required   = yes
#smtpd_helo_restrictions   = reject_invalid_hostname reject_unknown_hostname 
reject_non_fqdn_hostname 
smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains
header_checks  = regexp:/etc/postfix/header_checks 
body_checks= regexp:/etc/postfix/body_checks 
content_filter = vscan:
#mailbox_command   = procmail -a "$EXTENSION" 

---fin archivo
Pues eso, el script modificaría los  dependiendo de diversas 
entradas de 
por el teclado.


El Mar 25 Mar 2003 01:19, Cesar Rincon escribió:
> On Mon, 2003-03-24 at 13:41, Fernando Blat Peris wrote:
> > A alguien se le ocurre algo más elegante que mi chapucilla??
>
> Probablemente no he entendido lo que Rafael quiere, pero me suena
> demasiado simple...  En fin.  Mi solución no es más elegante, pero sí
> más compacta (y quizá más entendible y fácil de mantener):
>
> Asumiendo que el archivo contiene una línea que reza literalmente
> "Nombre:  cuya dirección ip es ":
>
> ---
> #!/bin/bash
> if [ -z "$1" -o -z "$2" ]; then
>   echo "Uso: $0 nombre ip" >&2
>   exit 1
> fi
>
> sed -e "s|^Nombre:  cuya dirección ip es |\
> Nombre: $1 cuya dirección ip es $2|"
>
> exit 0
> ---
>
> Y lo usarías como un filtro:
>
>   cat archivo.in | script NOMBRE 123.123.123.123 > archivo.out
>
> O, si te interesa reemplazar el archivo, algo como
>
>   script NOMBRE 123.123.123.123 < archivo > archivo.$$ && \
> mv archivo.$$ archivo
>
> Decía que "demasiado fácil" porque ésto es realmente un "one liner": no
> es necesario hacer el script, basta con teclear la invocación a sed.
>
> Pero bueno, seguramente no he entendido...
>
>  -CR



Re: modificar un archivo en bash

2003-03-25 Thread Victor Calzado Mayo
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

hola
On Tuesday 25 March 2003 09:49, Rafael F. Rodríguez wrote:
> Hola a todos.
>
>   Perdonad, creo que no he sido demasiado claro. :-).
>
>   Se trata de la configuración de postfix y fetchmail, como sabeis hay que
> configurar varios archivos, y como la configuración, alias, etc.
>
>   Lo que prependo hacer es un scripts donde pregunte el nombre de dominio,
> los nombre de usuario, contraseñas... y que el script acceda a los archivos
> (plantillas previamente preparadas y colocadas en cada ruta) y modifique
> los valores que tengo por defecto. ejemplo:

De la forma mas simple posible esto sería:
Simplemente recordarte que las comillas delimitan variables que contienen 
espacios.
un saludo
Victor

>
> ---archivo main.cf--

#!/bin/bash
#uso ./miscript "hostname" "domain" "relay"
> # NOMBRE, DOMINIO(S) y RED(ES)
> myhostname = $1
> mydomain   = $2
> relay  = $3
>
echo " > # DIRECCION QUE APARECE EN EL FROM
> myorigin  = $mydomain
> .
> .
> .
>
> # PROPIETARIO DE COLAS Y PROCESOS
> mail_owner   = postfix
> setgid_group = postdrop
>
> # TRATAMIENTO DE ALIAS
> alias_database   = hash:/etc/aliases
> alias_maps   = hash:/etc/aliases
>
> # IDENTIFICACION DE USUARIOS LOCALES
> local_recipient_maps = $alias_maps unix:passwd.byname
>
> # ENVIO EN PARALELO A UN MISMO DESTINO
> local_destination_concurrency_limit   = 2
> default_destination_concurrency_limit = 10
>
> # OTROS PARAMETROS DE CONFIGURACION
> notify_classes   = resource, software, policy
> transport_maps   = hash:/etc/postfix/transport
> disable_vrfy_command = yes
> disable_dns_lookups  = yes
> relayhost= [$relay]
> message_size_limit   = 10485760
> mailbox_size_limit   = 0
> maximal_queue_lifetime = 5d
> #maps_rbl_domains= relays.ordb.org
>
> # CONTROL DE CORREO ENTRANTE / SALIENTE
> mynetworks   = 
> mydestination= $myhostname localhost.$mydomain $mydomain
> relay_domains= $mydestination
> #smtpd_client_restrictions = reject_maps_rbl reject_unknown_client
> #smtpd_helo_required   = yes
> #smtpd_helo_restrictions   = reject_invalid_hostname
> reject_unknown_hostname reject_non_fqdn_hostname
> smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains
> header_checks  = regexp:/etc/postfix/header_checks
> body_checks= regexp:/etc/postfix/body_checks
> content_filter = vscan:
> #mailbox_command   = procmail -a "$EXTENSION"
" > archivo_de_salida
> ---fin archivo
>   Pues eso, el script modificaría los  dependiendo de diversas 
> entradas
> de por el teclado.
>
> El Mar 25 Mar 2003 01:19, Cesar Rincon escribió:
> > On Mon, 2003-03-24 at 13:41, Fernando Blat Peris wrote:
> > > A alguien se le ocurre algo más elegante que mi chapucilla??
> >
> > Probablemente no he entendido lo que Rafael quiere, pero me suena
> > demasiado simple...  En fin.  Mi solución no es más elegante, pero sí
> > más compacta (y quizá más entendible y fácil de mantener):
> >
> > Asumiendo que el archivo contiene una línea que reza literalmente
> > "Nombre:  cuya dirección ip es ":
> >
> > ---
> > #!/bin/bash
> > if [ -z "$1" -o -z "$2" ]; then
> >   echo "Uso: $0 nombre ip" >&2
> >   exit 1
> > fi
> >
> > sed -e "s|^Nombre:  cuya dirección ip es |\
> > Nombre: $1 cuya dirección ip es $2|"
> >
> > exit 0
> > ---
> >
> > Y lo usarías como un filtro:
> >
> >   cat archivo.in | script NOMBRE 123.123.123.123 > archivo.out
> >
> > O, si te interesa reemplazar el archivo, algo como
> >
> >   script NOMBRE 123.123.123.123 < archivo > archivo.$$ && \
> > mv archivo.$$ archivo
> >
> > Decía que "demasiado fácil" porque ésto es realmente un "one liner": no
> > es necesario hacer el script, basta con teclear la invocación a sed.
> >
> > Pero bueno, seguramente no he entendido...
> >
> >  -CR

- -- 
- --
Marzo
Uno de los peores meses para andar metiendo al mundo en guerras absurdas
El resto de meses del mismo tipo son: Enero, Febrero, Abril, Mayo, Junio, 
Julio, Agosto, Septiembre, Octubre, Noviembre y Diciembre. 
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE+gCo0EzqHF8R72ekRAjqnAKCVWzSEOTGQsaAbMTB9LM3LCuDF0wCeIXUC
00phKznYtW9KsC3yaIlvblE=
=N+Hv
-END PGP SIGNATURE-



Re: modificar un archivo en bash

2003-03-25 Thread Cesar Rincon
On Tue, 2003-03-25 at 02:49, Rafael F. Rodríguez wrote:
>   Lo que prependo hacer es un scripts donde pregunte el nombre de
> dominio, los nombre de usuario, contraseñas... y que el script acceda
> a los archivos (plantillas previamente preparadas y colocadas en cada
> ruta) y modifique los valores que tengo por defecto.

Oh, ya veo.  Pues mira, si hay libertad de decidir el formato de las
plantillas (quiero decir, si no hay que ajustarse a un formato de
plantilla en particular), yo haría scripts-plantilla.  Por ejemplo:

-
#!/bin/sh
# genmain.sh: Plantilla para generar el main.cf de Postfix
# Uso: genmain.sh HOSTNAME DOMAIN RELAY NETWORKS

cat < $TARGET
exit 0
-

Las comillas son necesarias por si te teclean espacios en alguna de las
variables.

¿Se parece más a lo que necesitas, ésto?

 -CR