Linux en Espanol
 
SED + Variables (tema #24691)
Publicar nuevo tema  Responder al tema    Foros de discusión -> Estaciones de Trabajo
Autor Mensaje
cazademonios
Forista
Registrado: 2012-03-23
Mensajes: 68

Publicado: 2013-04-08 13:07:56    Asunto: SED + Variables

hola buenas quer?a usar un script con una variable que es un n?mero de linea ejemplo:2
pero que cambia seg?n donde este la palabra que quiero en un documento si esta en la l?nea 3 la variable es 3

Entonces con eso quer?a usar el comando sed para que eliminase esa l?nea

como es una variable como su nombre indica puede variar por lo tanto tengo que introducirle al comando sed el nombre de la variable ejemplo: $ndelinea

pero el comando sed por mas que busco por internet no encuentro el m?todo para indicarle variables :(

Resumiendo
esto ser?a el uso de una variable con el comando rm
[code:1:7259373dbb]ruta=/home/blas
rm -r $ruta[/code:1:7259373dbb]

pero sed no las admite poniendolas as? y por muchos tutos que veo para ponerlo ninguno funciona :(

Alguien sabr?a como hacerlo ?

gracias de ante mano 8) 8)
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2013-04-08 14:04:19    Asunto:

Hola.

?Puedes poner un ejemplo m?s o menos detallado?

Saludos.
cazademonios
Forista
Registrado: 2012-03-23
Mensajes: 68

Publicado: 2013-04-09 06:02:32    Asunto:

pues un ejemplo mas detallado era para hacerlo en un servidor "vsftpd" en modo pasivo para que actualize la IP p?blica el s?lo aqui tengo el script sin acabar s?lo le falta usar la variable con el comando sed para reemplazar texto

[code:1:133b9e1f08]#!/bin/bash
line=$(grep -ne pasv_address= /etc/vsftpd.conf | cut -d ":" -f 1)
ipub=$(curl ifconfig.me)
echo "cambiando ip publica en"
echo "/etc/vsftpd"
[/code:1:133b9e1f08]

Con la variable line averiguo cual es el n?mero de l?nea de la directiva "pasv_address=11.11.11.22"

y con la variable ipub devuelve mi ip p?blica actual "x.x.x.x"

ahora quiero que sed elimine el n?mero de linea donde este pasv_address=11.11.11.22 que lo se gracias a la variable "$line"

y sed escriba pasv_address=$ipub (obviamente "$ipub" no es la palabra sino la variable que sera por ejemplo "pasv_address=8.8.8.2")

Encontr? un bash que lo hac?a y funcionaba pero no usaba el comando sed.

Aun habiendo ya un bash yo quiero hacerlo por mi m?todo para aprender.
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2013-04-09 09:53:15    Asunto:

Hola[quote:8443dc0a71="cazademonios"]#!/bin/bash
line=$(grep -ne pasv_address= /etc/vsftpd.conf | cut -d ":" -f 1)
ipub=$(curl ifconfig.me)
echo "cambiando ip publica en"
echo "/etc/vsftpd"
[/quote:8443dc0a71]
Yo me quedar?a mejor no con el n?mero de la l?nea donde est? pasv_address sino con la l?nea completa, as?:
[code:1:8443dc0a71]#!/bin/bash
ACTUAL=$(grep pasv_address= /etc/vsftpd.conf)
ipub=$(curl ifconfig.me)
REEMPLAZO='s/'$ACTUAL'/pasv_address='$ipub'/g'
sed "$REEMPLAZO" /etc/vsftpd.conf
#Falta redireccionar la salida de sed para machacar vsftpd.conf[/code:1:8443dc0a71]
Ten en cuenta que el m?todo de buscar y cambiar, como t? lo estabas intentando o como lo he hecho yo, fallar? si dejas una l?nea de comentario con un valor de pasv_address antiguo, del estilo:
[code:1:8443dc0a71]# pasv_address=1.1.2.2[/code:1:8443dc0a71]
Saludos.
cazademonios
Forista
Registrado: 2012-03-23
Mensajes: 68

Publicado: 2013-04-09 17:41:14    Asunto:

Um la verdad es que tu m?todo va mucho mejor as? no tienes que calentarte la cabeza de como se pon?an variables dentro de sed :)

muchas gracias

S?lo una cosa eso de que no est? redireccionada la salida del comando sed para machacar el fichero /etc/vsftpd

supuestamente con el comando sed deber?a reemplazar la l?nea no se por que dijiste eso ?

Por cierto tu script funciona muy bien :)
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2013-04-09 18:56:45    Asunto:

Hola.

Por defecto sed saca su salida a stdout. Si quieres que te machaque el fichero original debes redirigir la salida con ">", salvo que haya alg?n par?metro de sed que le diga que sobreescriba el original. Si ese par?metro existe, no lo conozco.
Lo que s? te recomiendo es que no intentes sobreescribir el fichero que est?s procesando sino que lo hagas a trav?s de un fichero con otro nombre. O incluso mejor, renombra el fichero anterior y te sirve como copia de seguridad por lo que pueda pasar.
[code:1:faa9c031d5]#!/bin/bash
....
TEMPORAL=/etc/vsftpd.conf.$(date +%Y%m%d)
mv /etc/vsftpd.conf $TEMPORAL
....
sed '... ... ...' $TEMPORAL > /etc/vsftpd.conf
....[/code:1:faa9c031d5]
Saludos.
cazademonios
Forista
Registrado: 2012-03-23
Mensajes: 68

Publicado: 2013-04-09 20:55:26    Asunto:

Si entiendo de todos modos no se busca machacar el fichero sino modificarlo y he probado tu script y lo modifica bien no creo que haya que pasarle la salida stdout





La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute",
el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute,
the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries