*
#! /bin/sh
file=xyz.cfg
addr=$1
port=$2
username=$3
sed -i 's/address=.*/address='$addr'/' $file
sed -i 's/port=.*/port='$port'/' $file
sed -i 's/username=.*/username='$username'/' $file
*
Espero que este sea más fácil de entender para los principiantes
sed -i 's/something/other/g' filename.txt
Editará filename.txt en el lugar y cambiará la palabra 'algo' a 'otro'
Sin embargo, creo que -i puede ser una extensión de GNU, pero si te parece bien, puedes agregarla a través de find, xargs, etc.
Si desea cambiarlo en un script de shell, puede tomar argumentos en la línea de comandos y referirse a ellos por número, por ejemplo, $1
Editar:
Según mi comentario, la respuesta de sudo_O a continuación es exactamente el ejemplo que desea. Lo que agregaré es que es común que desee hacer tales coincidencias con múltiples archivos, abarcando subdirectorios, etc., así que conozca find/xargs, y puede combinar los dos. Un ejemplo simple de cambiar la subred en un grupo de archivos .cfg podría ser:
find -name '*.cfg' -print0 | xargs -0 -I {} sed -ie 's/\(192.168\)\.1/\1\.7/' {}
Tenga en cuenta los argumentos -print0/-0 para encontrar/xargs (muy útil para rutas/nombres de archivo con espacios), y que debe escapar de los corchetes de captura debido al shell (lo mismo en el ejemplo de Sudo)
¿Qué tal algo como:
#!/bin/bash
addr=$1
port=$2
user=$3
sed -i -e "s/\(address=\).*/\1$1/" \
-e "s/\(port=\).*/\1$2/" \
-e "s/\(username=\).*/\1$3/" xyz.cfg
Donde $1,$2
y $3
son los argumentos pasados al script. Guárdelo en un archivo como script.sh
y asegúrese de que sea ejecutable con chmod +x script.sh
entonces puedes ejecutarlo como:
$ ./script.sh 127.8.7.7 7822 xyz_ITR4
$ cat xyz.cfg
group address=127.8.7.7
port=7822
Jboss username=xyz_ITR4
Esto le brinda la estructura básica, sin embargo, le gustaría pensar en validar la entrada, etc.