*
#! /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
*
これが初心者にとって理解しやすいものになることを願っています
sed -i 's/something/other/g' filename.txt
filename.txt をその場で編集し、「something」という単語を「other」に変更します
-i は GNU 拡張機能かもしれませんが、よろしければ、find や xargs などで追加できます。
シェル スクリプトで変更したい場合は、コマンド ラインで引数を取り、それらを番号で参照できます (例:$1)
編集:
私のコメントによると、以下の sudo_O の回答はまさにあなたが望む例です。私が追加するのは、サブディレクトリなどにまたがる複数のファイルでこのような一致を行うことが一般的であるため、find/xargs を理解することで、2 つを組み合わせることができるということです。一連の .cfg ファイルでサブネットを変更する簡単な例:
find -name '*.cfg' -print0 | xargs -0 -I {} sed -ie 's/\(192.168\)\.1/\1\.7/' {}
find/xargs への -print0/-0 引数 (スペースを含むパス/ファイル名に非常に便利) と、シェルのためにキャプチャブラケットをエスケープする必要があることに注意してください (sudo の例と同じ)
次のようなものはどうですか:
#!/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
どこ $1,$2
と $3
スクリプトに渡される引数です。 script.sh
などのファイルに保存します chmod +x script.sh
で実行可能であることを確認してください 次に、次のように実行できます:
$ ./script.sh 127.8.7.7 7822 xyz_ITR4
$ cat xyz.cfg
group address=127.8.7.7
port=7822
Jboss username=xyz_ITR4
これで基本的な構造が得られますが、入力の検証について考えたいと思うでしょう。