*
#! /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
*
J'espère que celui-ci sera plus simple à comprendre pour les débutants
sed -i 's/something/other/g' filename.txt
Modifiera filename.txt sur place et changera le mot "quelque chose" en "autre"
Je pense que -i peut être une extension GNU, mais si cela vous convient, vous pouvez l'ajouter via find, xargs, etc.
Si vous souhaitez le modifier dans un script shell, vous pouvez prendre des arguments sur la ligne de commande et y faire référence par un numéro, par exemple $1
Modifier :
Selon mon commentaire, la réponse de sudo_O ci-dessous est exactement l'exemple que vous voulez. Ce que j'ajouterai, c'est qu'il est courant que vous souhaitiez faire de telles correspondances avec plusieurs fichiers, couvrant des sous-répertoires, etc., alors apprenez à connaître find/xargs, et vous pouvez combiner les deux. Un exemple simple de changement de sous-réseau dans un groupe de fichiers .cfg pourrait être :
find -name '*.cfg' -print0 | xargs -0 -I {} sed -ie 's/\(192.168\)\.1/\1\.7/' {}
Notez les arguments -print0/-0 pour find/xargs (très utile pour les chemins/noms de fichiers avec des espaces), et que vous devez échapper les crochets de capture à cause du shell (idem dans l'exemple de sudo)
Que diriez-vous de quelque chose comme :
#!/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
Où $1,$2
et $3
sont les arguments passés au script. Enregistrez-le dans un fichier tel que script.sh
et assurez-vous qu'il est exécutable avec chmod +x script.sh
alors vous pouvez l'exécuter comme :
$ ./script.sh 127.8.7.7 7822 xyz_ITR4
$ cat xyz.cfg
group address=127.8.7.7
port=7822
Jboss username=xyz_ITR4
Cela vous donne la structure de base mais vous voudriez penser à valider l'entrée ect.