Comando sed para reemplazar texto
Resuelto
thierryR51
Mensajes publicados
144
Estado
Miembro
-
zipe31 Mensajes publicados 34620 Fecha de registro Estado Colaborador Última intervención -
zipe31 Mensajes publicados 34620 Fecha de registro Estado Colaborador Última intervención -
Hola,
Estoy intentando reemplazar una IP en el archivo hosts
He intentado esto:
Pero el resultado que obtengo es:
Quisiera eliminar 80.119.80.108 pero estoy atascado en la sem....... Estoy casi ahí, pero agradecería un poco de ayuda.
Gracias
Configuración: Mageia5 en Toshiba Satellite L350
--
Investigador en mejoras.
[url]
Estoy intentando reemplazar una IP en el archivo hosts
cat /etc/hosts
80.119.80.108 Backup
He intentado esto:
sed -e"s/Backup/80.119.80.109 Backup/g" -i /etc/hosts;
Pero el resultado que obtengo es:
80.119.80.108 80.119.80.109 Backup
Quisiera eliminar 80.119.80.108 pero estoy atascado en la sem....... Estoy casi ahí, pero agradecería un poco de ayuda.
Gracias
Configuración: Mageia5 en Toshiba Satellite L350
--
Investigador en mejoras.
[url]
4 respuestas
-
Hola;
sed -i.bak '/Copia de seguridad/{s/^[^ ]*/80.119.80.109/}' /etc/hosts
--
_______________________________ ☯ Zen mis nuggets ☮ ______________________________
Haced un gesto por el medio ambiente, cerrad vuestras ventanas y adoptad un pingüino… 🐧-
Si lo incrusto en mi script con variables
sed -i.bak '/'$nameServeur'/{s/^[^ ]*/'$newIp'/}' /etc/hosts
obtengo 1 error en el primer carácter.sed -i.bak / 'MaMaison/{s/^[^ ]*/86.66.183.203/}' /etc/hosts
sed: -e expresión n°1, carácter 1: dirección de expresión regular incompleta
Me parece que lo he escrito bien.... -
Hay un espacio de más en el nombre de tu variable $nameServeur ;-(
/ 'MaMaison/
$ name=" Sauvegarde";nip="80.119.80.109"
$ sed '/'${name}'/{s/^[^ ]*/'${nip}'/}' plop
sed: -e expresión n°1, carácter 1: expresión regular de dirección incompleta
$ name="Sauvegarde";nip="80.119.80.109"
$ sed '/'${name}'/{s/^[^ ]*/'${nip}'/}' plop
80.119.80.109 Sauvegarde -
-
-
-
-
Gracias Zipe31. Siempre eres el gran especialista en bash....
Buena noche.
--
Investigador en mejoras.
[url]-
1 línea de hosts se descompone así:
IP + TAB + nombre de host
Creo que todo el problema consiste en insertar el TAB.
Parece que hay varios SED y no todos manejan el '\t'
http://sed.sourceforge.net/sed1line_fr.html -
-
He adaptado a mis variables. De hecho, no escribe nada. Solo tengo la revisión de mi archivo.
sed '/'${nameServeur}'/{s/^[^\t]*/'${newIp}'/}' $filehosts
o $nameServeur = MaMaison
$newIp=80.119.80.109
$filehosts= /etc/hosts
¿Es porque la línea que contiene 'MaMaison' ya no existe en mi archivo?
De hecho, me gustaría:
Si la línea existe: reemplazarla
Si no existe: crearla.
Gracias por tu ayuda. La orden sed es complicada... -
Hola,
Un ejemplo de archivo hosts sin la entrada MiCasa$ cat mi_archivo_hosts
80.119.80.108 Respaldo
Un ejemplo con las 2 entradas$ cat mi_archivo_casa
80.119.80.108 Respaldo
192.168.10.1 MiCasa
El archivo de script para sed:$ cat script.sed
/Respaldo/{
s/[^\t]*/80.119.80.109/
}
/MiCasa/{
s/[^\t]*/192.168.10.2/
b
}
$ {
a\192.168.10.2\tMiCasa
}
El script ejecutado sobre el archivo sin la ocurrencia de MiCasa:$ sed -f script.sed mi_archivo_hosts
80.119.80.109 Respaldo
192.168.10.2 MiCasa
El script ejecutado sobre el archivo que ya tiene las 2 ocurrencias$ sed -f script.sed mi_archivo_casa
80.119.80.109 Respaldo
192.168.10.2 MiCasa -
```html OK, veo que con sed la solución existe. Así que para integrar esto en mi script, he hecho esto. No tengo un segundo archivo sed. Integro todo en mi script.
sed -e '/'${nameServeur}'/{s/^[^\t]*/'${newIp}'/}';$ '{a\'${newIp}'\t'${nameServeur}'}' $filehosts
La respuesta del comando es+ sed -e '/MaMaison/{s/^[^\t]*/86.66.183.130/}'
^C
Como puedes ver, se queda bloqueado. Tuve que terminar el script manualmente. Visiblemente, el ";" no parece estar siendo considerado. Sin embargo, he seguido los consejos de https://openclassrooms.com/courses/la-commande-sed donde dicen que para un comando de una sola línea, se separa con ";"
¿He entendido mal? ```
-
-
Pequeño problema. Cuando sed quiere escribir
sed -i -e '/MaMaison/{s/^[^\t]*/86.66.183.119/}' -e b -e '$ a\86.66.183.119\tMaMaison' /etc/hosts
si la línea no existe en el archivo hosts, no escribe nada.
Veo que b está sin las comillas, pero en el script, sí están. Es en el resultado del comando donde desaparecen. Así que he reemplazado las comillas simples por dobles, pero tampoco funciona. ¿Podría ser esa la causa de que no se escriba nada?
Gracias.
--
Investigador en mejoras.
[url] -
Efectivamente, el post 29 también menciona lo mismo y te respondí después. Funciona, pero no bien. Quizás deberíamos hacer 2 líneas sed con una condición "if"?
--
Investigador en mejoras.
[url]-
Sin embargo...
La entrada "MaMaison" no existe y se añade:$ cat hosts
80.119.80.108 Backup
$ sed -e '/MaMaison/{s/^[^\t]*/86.66.183.119/;b}' -e '$ a\86.66.183.119\tMaMaison' hosts
80.119.80.108 Backup
86.66.183.119 MaMaison
La entrada "MaMaison" existe y se modifica:$ cat maison
80.119.80.108 Backup
192.168.10.1 MaMaison
$ sed -e '/MaMaison/{s/^[^\t]*/86.66.183.119/;b}' -e '$ a\86.66.183.119\tMaMaison' maison
80.119.80.108 Backup
86.66.183.119 MaMaison
-