Apa yang telah Anda lakukan adalah menghapus di SUBSTITUTETHIS
mana pun itu muncul dalam file (tetapi tidak sisa baris di mana ia muncul) dan masukkan konten di temp.TXT
bawah baris itu. Jika SUBSTITUTETHIS
muncul beberapa kali dalam satu baris, hanya kemunculan pertama yang dihapus, dan hanya satu salinan temp.TXT
yang ditambahkan.
Jika Anda ingin mengganti seluruh baris saat SUBSTITUTETHIS
muncul, gunakan d
perintah. Karena Anda perlu menjalankan keduanya r
dan d
ketika ada pertandingan, masukkan mereka dalam kelompok yang diperkuat.
sed -e '/SUBSTITUTETHIS/ {' -e 'r temp.TXT' -e 'd' -e '}' -i devel.txt
Beberapa implementasi sed memungkinkan Anda menggunakan titik koma untuk memisahkan perintah dan menghilangkan pemisah di sekitar tanda kurung, tetapi Anda masih memerlukan baris baru untuk mengakhiri argumen ke r
perintah:
sed -e '/SUBSTITUTETHIS/ {r temp.TXT
d}' -i devel.txt
Jika Anda ingin mengganti SUBSTITUTETHIS
dengan konten file, tetapi simpan apa yang datang sebelum dan sesudahnya di telepon, itu lebih rumit. Metode paling sederhana adalah dengan memasukkan konten file dalam perintah sed; perhatikan bahwa Anda harus mengutip dengan benar isinya.
sed -e "s/SUBSTITUTETHIS/$(<temp.TXT sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' | tr -d '\n')/g" -i devel.txt
Atau gunakan Perl. Ini singkat tetapi berjalan cat
sekali untuk setiap substitusi:
perl -pe 's/SUBSTITUTETHIS/`cat temp.TXT`/ge' -i devel.txt
Untuk membaca file sekali ketika skrip dimulai, dan hindari tergantung pada perintah shell:
perl -MFile::Slurp -pe 'BEGIN {$r = read_file("temp.TXT"); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt
(disajikan pada dua baris agar mudah dibaca tetapi Anda dapat menghilangkan jeda baris). Jika nama file adalah variabel, untuk menghindari masalah mengutip, kirimkan ke script melalui variabel lingkungan:
replacement_file=temp.TXT perl -MFile::Slurp -pe 'BEGIN {$r = read_file($replacement_file); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt