*
#! /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
*
Doufám, že toto bude pro začátečníky srozumitelnější
sed -i 's/something/other/g' filename.txt
Upraví soubor filename.txt na místě a změní slovo 'něco' na 'jiné'
Myslím, že -i může být rozšíření GNU, ale pokud vám to vyhovuje, můžete ho přidat pomocí find, xargs atd.
Pokud byste to chtěli změnit v shell skriptu, můžete vzít argumenty na příkazovém řádku a odkazovat na ně číslem, např. $1
Upravit:
Podle mého komentáře je odpověď sudo_O níže přesně tím příkladem, který chcete. Co dodám, je, že je běžné, že budete chtít provádět takové shody s více soubory, přes podadresáře atd., takže se seznamte s find/xargs a můžete obojí zkombinovat. Jednoduchý příklad změny podsítě v hromadě souborů .cfg může být:
find -name '*.cfg' -print0 | xargs -0 -I {} sed -ie 's/\(192.168\)\.1/\1\.7/' {}
Všimněte si argumentů -print0/-0 pro nalezení/xargs (velmi užitečné pro cesty/názvy souborů s mezerami) a že musíte uniknout zachycovacím závorkám kvůli shellu (stejné jako v příkladu sudo)
Co třeba něco jako:
#!/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
Kde $1,$2
a $3
jsou argumenty předané skriptu. Uložte jej do souboru, například script.sh
a ujistěte se, že je spustitelný s chmod +x script.sh
pak to můžete spustit jako:
$ ./script.sh 127.8.7.7 7822 xyz_ITR4
$ cat xyz.cfg
group address=127.8.7.7
port=7822
Jboss username=xyz_ITR4
To vám dává základní strukturu, kterou byste však chtěli přemýšlet o ověření vstupu atd.