Perintah sed yang bekerja pada MacOS (setidaknya, OS 10) dan Unix sama (mis. Tidak memerlukan gnu sed seperti Gilles '(saat ini diterima) seseorang melakukannya):
sed -e '/CLIENTSCRIPT="foo"/a\'$'\n''CLIENTSCRIPT2="hello"' file
Ini berfungsi dalam bash dan mungkin juga shells lain yang mengetahui gaya kutipan evaluasi $ '\ n'. Semuanya bisa dalam satu baris dan bekerja di perintah sed / POSIX yang lebih lama. Jika mungkin ada beberapa baris yang cocok dengan CLIENTSCRIPT = "foo" (atau yang setara dengan Anda) dan Anda hanya ingin menambahkan baris tambahan pertama kali, Anda dapat mengolahnya kembali sebagai berikut:
sed -e '/^ *CLIENTSCRIPT="foo"/b ins' -e b -e ':ins' -e 'a\'$'\n''CLIENTSCRIPT2="hello"' -e ': done' -e 'n;b done' file
(ini membuat loop setelah kode penyisipan baris yang hanya menggilir sisa file, tidak pernah kembali ke perintah sed pertama lagi).
Anda mungkin memperhatikan bahwa saya menambahkan '^ *' ke pola yang cocok kalau-kalau baris tersebut muncul dalam komentar, katakanlah, atau indentasi. Ini tidak 100% sempurna tetapi mencakup beberapa situasi lain yang cenderung umum. Sesuaikan sesuai kebutuhan ...
Kedua solusi ini juga menyelesaikan masalah (untuk solusi umum untuk menambahkan baris) bahwa jika baris baru Anda yang dimasukkan berisi garis miring terbalik atau ampersand mereka akan ditafsirkan dengan sed dan kemungkinan tidak akan keluar sama, seperti halnya \n
- misalnya.\0
akan menjadi baris pertama yang cocok. Sangat berguna jika Anda menambahkan baris yang berasal dari variabel di mana Anda harus melarikan diri semuanya terlebih dahulu menggunakan $ {var //} sebelumnya, atau pernyataan lain dll.
Solusi ini sedikit kurang berantakan dalam skrip (yang mengutip dan \ n tidak mudah dibaca), ketika Anda tidak ingin meletakkan teks pengganti untuk perintah di awal baris jika mengatakan, dalam suatu fungsi dengan garis lekuk. Saya telah mengambil keuntungan bahwa $ '\ n' dievaluasi ke baris baru oleh shell, ini bukan dalam nilai kutip tunggal '\ n' biasa.
Sudah cukup lama saya pikir perl / awk mungkin menang karena lebih mudah dibaca.