Tengo dos archivos: file1
y file2
.
file1
tiene los siguientes contenidos:
---
host: "localhost"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "localhost:2181"
file2
contiene una dirección IP ( 1.1.1.1
)
Lo que quiero hacer es reemplazar localhost
con 1.1.1.1
, para que el resultado final sea:
---
host: "1.1.1.1"
port: 3000
reporter_type: "zookeeper"
zk_hosts:
- "1.1.1.1:2181"
Yo he tratado:
sed -i -e "/localhost/r file2" -e "/localhost/d" file1
sed '/localhost/r file2' file1 |sed '/localhost/d'
sed -e '/localhost/r file2' -e "s///" file1
Pero obtengo la línea completa reemplazada o la IP va a la línea después de la que necesito modificar.
text-processing
sed
Jay Kah
fuente
fuente
cat file1 | sed -e 's/localhost/1.1.1.1/g'
funciona?\r
comando sed.Respuestas:
Aquí hay una
sed
solución:Debe usar
sed -i
para hacer el cambio en el lugar.Si puede usar
awk
, aquí hay una forma de hacerlo:fuente
awk
. Me imagino quesed
es capaz de esto, pero será terriblemente torpe. ¡Aquí es dondeawk
brilla!sed
solución debe ser doblemente citada en caso de que el archivo contenga espacios o caracteres globales./
y&
en la sustitución. Eso es"$(sed 's:[/\\&]:\\&:g' file2)"
Puede leer el archivo con la cadena de reemplazo usando la sustitución del comando de shell, antes de
sed
usarlo. Entoncessed
verá solo una sustitución normal:sed "s/localhost/$(cat file2)/" file1 > changed.txt
fuente
Intenta usar
y luego, elimine los campos no deseados.
fuente
También tuve este "problema" hoy: cómo reemplazar un bloque de texto con el contenido de otro archivo.
Lo resolví haciendo una función bash (que se puede reutilizar en scripts).
fuente