*
#! /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
*
Saya harap yang ini akan lebih mudah dipahami untuk pemula
sed -i 's/something/other/g' filename.txt
Akan mengedit filename.txt di tempat, dan mengubah kata 'something' menjadi 'other'
Saya pikir -i mungkin merupakan ekstensi GNU, tetapi jika tidak apa-apa untuk Anda, Anda dapat menambahkannya melalui find, xargs, dll.
Jika Anda ingin mengubahnya dalam skrip shell, Anda dapat menggunakan argumen pada baris perintah dan merujuknya dengan angka, misalnya $1
Sunting:
Sesuai komentar saya, jawaban sudo_O di bawah ini persis seperti contoh yang Anda inginkan. Apa yang akan saya tambahkan adalah bahwa biasanya Anda ingin melakukan pencocokan seperti itu dengan banyak file, mencakup subdirektori, dll, jadi kenali find/xargs, dan Anda dapat menggabungkan keduanya. Contoh sederhana untuk mengubah subnet dalam sekumpulan file .cfg adalah:
find -name '*.cfg' -print0 | xargs -0 -I {} sed -ie 's/\(192.168\)\.1/\1\.7/' {}
Catat -print0/-0 args untuk menemukan/xargs (sangat berguna untuk jalur/nama file dengan spasi), dan Anda harus keluar dari tanda kurung karena shell (sama dengan contoh sudo)
Bagaimana dengan sesuatu seperti:
#!/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
Dimana $1,$2
dan $3
adalah argumen yang diteruskan ke skrip. Simpan file seperti script.sh
dan pastikan itu dapat dieksekusi dengan chmod +x script.sh
maka Anda dapat menjalankannya seperti:
$ ./script.sh 127.8.7.7 7822 xyz_ITR4
$ cat xyz.cfg
group address=127.8.7.7
port=7822
Jboss username=xyz_ITR4
Ini memberi Anda struktur dasar namun Anda ingin berpikir tentang memvalidasi masukan dll.