Apa yang telah Anda lakukan adalah menghapus di SUBSTITUTETHISmana pun itu muncul dalam file (tetapi tidak sisa baris di mana ia muncul) dan masukkan konten di temp.TXTbawah baris itu. Jika SUBSTITUTETHISmuncul beberapa kali dalam satu baris, hanya kemunculan pertama yang dihapus, dan hanya satu salinan temp.TXTyang ditambahkan.
Jika Anda ingin mengganti seluruh baris saat SUBSTITUTETHISmuncul, gunakan dperintah. Karena Anda perlu menjalankan keduanya rdan dketika 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 rperintah:
sed -e '/SUBSTITUTETHIS/ {r temp.TXT
d}' -i devel.txt
Jika Anda ingin mengganti SUBSTITUTETHISdengan 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 catsekali 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