GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menggunakan sed untuk mengubah file konfigurasi saya, dengan kunci dan nilai yang fleksibel?

sed -i -e '/central\.database =/ s/= .*/= new_value/' /path/to/file

Penjelasan:

  • -i memberitahu sed untuk menyimpan hasilnya ke file input. Tanpanya sed akan mencetak hasilnya ke stdout.
  • /central\.database =/ mencocokkan baris yang berisi string di antara garis miring:central.database = . . diloloskan karena merupakan karakter khusus di regex.
  • s/OLD/NEW/ bagian melakukan s penggantian. String OLD adalah ekspresi reguler untuk mencocokkan dan NEW part adalah string yang akan diganti.
  • Dalam ekspresi reguler, .* berarti "cocok dengan apa saja". Jadi = .* cocok dengan tanda sama dengan, spasi, lalu apa saja setelahnya.

Berikut adalah contoh ekspresi:

sed -i 's/^\(central\.database\s*=\s*\).*$/\1SQLTEST/' file.cfg

Jika Anda ingin mencocokkan barang dengan / di dalamnya, Anda dapat menggunakan pembatas lain:

sed -i 's#^\(cent/ral\.data/base\s*=\s*\).*$#\1SQL/TEST#' file.cfg

Atau dengan perluasan variabel:

VAL="SQLTEST"
sed -i "s/^\(central\.database\s*=\s*\).*\$/\1$VAL/" file.cfg

Dalam contoh Anda:

sshRetValue=`sed -i "s/^\(\1$CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt`;

Ada \1 sebelum $CENTRAL_DB_NAME yang tidak valid. Juga, sed tidak mencetak nilai pengembaliannya. Ini adalah cara yang lebih disukai untuk memeriksa nilai kembalian:

sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
sed_return_value=$?

Dan akhirnya menyalurkan ke ssh (tidak diuji):

sed_return_value=$(ssh server <<EOF
    sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
    echo $?
EOF
)

-i adalah untuk mengganti data dalam file input. Kalau tidak, sed menulis ke stdout.

Ekspresi reguler adalah bidangnya sendiri. Tidak mungkin untuk menjelaskannya secara mendalam dalam jawaban stackoverflow, kecuali ada beberapa fungsi tertentu yang menghindari Anda.


Linux
  1. Cara Menemukan File Konfigurasi MySQL, PHP dan Apache

  2. Cara Zip File dan Direktori di Linux (dengan Contoh)

  3. Cara Mengubah Kepemilikan File dan Direktori dengan Perintah chown

  1. Cara Menemukan File Dengan Izin SUID dan SGID di Linux

  2. Cara Menggunakan Perintah Sed di Linux dengan Contoh

  3. Cara Menemukan file besar linux dengan perintah find dan du

  1. Cara Menggunakan rsync untuk Mengecualikan File dan Direktori dalam Transfer Data

  2. Bagaimana Cara Memindahkan File Dan Melihat Kemajuannya (mis. Dengan Bilah Kemajuan)?

  3. Bagaimana cara mengubah file di tempat menggunakan awk? (seperti halnya sed -i)