GNU/Linux >> Belajar Linux >  >> Linux

Cara mengganti variabel shell dalam file teks kompleks

Saya tahu topik ini sudah lama, tetapi saya memiliki solusi kerja yang lebih sederhana tanpa mengekspor variabel. Bisa jadi oneliner, tapi saya lebih suka membagi menggunakan \ di ujung jalur.

var1='myVar1'\
var2=2\
var3=${var1}\
envsubst '$var1,$var3' < "source.txt" > "destination.txt"

#         ^^^^^^^^^^^    ^^^^^^^^^^     ^^^^^^^^^^^^^^^
# define which to replace   input            output

Variabel harus didefinisikan ke baris yang sama dengan envsubst adalah untuk dianggap sebagai variabel lingkungan.

'$var1,$var3' adalah opsional untuk hanya mengganti yang ditentukan. Bayangkan sebuah file masukan yang berisi ${VARIABLE_USED_BY_JENKINS} yang seharusnya tidak diganti.


Mengacu pada jawaban 2, saat mendiskusikan envsubst, Anda bertanya:

Bagaimana cara membuatnya bekerja dengan variabel yang dideklarasikan dalam skrip .sh saya?

Jawabannya adalah Anda hanya perlu mengekspor variabel Anda sebelum memanggil envsubst .

Anda juga dapat membatasi string variabel yang ingin Anda ganti di input menggunakan envsubst SHELL_FORMAT argumen (menghindari penggantian string yang tidak diinginkan dalam input dengan nilai variabel shell yang umum - mis. $HOME ).

Misalnya:

export VAR1='somevalue' VAR2='someothervalue'
MYVARS='$VAR1:$VAR2'

envsubst "$MYVARS" <source.txt >destination.txt

Akan mengganti semua contoh $VAR1 dan $VAR2 (dan hanya VAR1 dan VAR2 ) di source.txt dengan 'somevalue' dan 'someothervalue' masing-masing.


Lihat, ternyata di sistem saya ada envsubst perintah yang merupakan bagian dari paket gettext-base.

Jadi, ini membuatnya mudah:

envsubst < "source.txt" > "destination.txt"

Perhatikan jika Anda ingin menggunakan file yang sama untuk keduanya, Anda harus menggunakan sesuatu seperti sponge moreutil , seperti yang disarankan oleh Johnny Utahh:envsubst < "source.txt" | sponge "source.txt" . (Karena pengalihan shell akan mengosongkan file sebelum dibaca.)


Linux
  1. Cara Menambahkan Nomor Baris Ke File Teks Di Linux

  2. Cara Kompres Dan Dekompresi File Di Linux

  3. Bagaimana Cara Mengubah Ekstensi Banyak File?

  1. Cara Menemukan File dengan Perintah fd di Linux

  2. Cara mengonversi file teks ke semua huruf besar atau kecil

  3. Bagaimana membedakan biner dari file teks di linux

  1. Cara Menggunakan Perintah Grep untuk Menemukan Teks di File

  2. Bagaimana cara menghapus baris baru dari file teks?

  3. Ganti variabel lingkungan dalam teks jika ada