*
#! /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
*
Ich hoffe, dass dies für Anfänger einfacher zu verstehen ist
sed -i 's/something/other/g' filename.txt
Bearbeitet filename.txt an Ort und Stelle und ändert das Wort „something“ in „other“
Ich denke, dass -i eine GNU-Erweiterung sein könnte, aber wenn es für Sie in Ordnung ist, können Sie es über find, xargs etc. hinzufügen.
Wenn Sie es in einem Shell-Skript ändern möchten, können Sie Argumente in der Befehlszeile nehmen und auf sie mit einer Nummer verweisen, z. B. $1
Bearbeiten:
Laut meinem Kommentar ist die Antwort von sudo_O unten genau das Beispiel, das Sie wollen. Was ich hinzufügen möchte, ist, dass Sie solche Übereinstimmungen häufig mit mehreren Dateien durchführen möchten, die sich über Unterverzeichnisse usw. erstrecken. Lernen Sie also find/xargs kennen, und Sie können die beiden kombinieren. Ein einfaches Beispiel für das Ändern des Subnetzes in einer Reihe von .cfg-Dateien könnte sein:
find -name '*.cfg' -print0 | xargs -0 -I {} sed -ie 's/\(192.168\)\.1/\1\.7/' {}
Beachten Sie die -print0/-0-Argumente für find/xargs (sehr nützlich für Pfade/Dateinamen mit Leerzeichen) und dass Sie die einfangenden Klammern wegen der Shell mit Escapezeichen versehen müssen (dasselbe gilt für das Beispiel von sudo)
Wie wäre es mit etwas wie:
#!/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
Wobei $1,$2
und $3
sind die Argumente, die an das Skript übergeben werden. Speichern Sie es in einer Datei wie script.sh
und stellen Sie sicher, dass es mit chmod +x script.sh
ausführbar ist dann können Sie es wie folgt ausführen:
$ ./script.sh 127.8.7.7 7822 xyz_ITR4
$ cat xyz.cfg
group address=127.8.7.7
port=7822
Jboss username=xyz_ITR4
Dies gibt Ihnen die Grundstruktur, aber Sie möchten über die Validierung von Eingaben usw. nachdenken.