MacOS (en azından OS 10) ve Unix için çalışan sed komutu (yani Gilles'in (şu anda kabul edilen) gibi gnu sed gerektirmez):
sed -e '/CLIENTSCRIPT="foo"/a\'$'\n''CLIENTSCRIPT2="hello"' file
Bu bash ve belki de $ '\ n' değerlendirme teklif stilini bilen diğer kabukları çalışır. Her şey bir satırda olabilir ve eski / POSIX sed komutlarında çalışabilir. CLIENTSCRIPT = "foo" (veya eşdeğeri) ile eşleşen birden fazla satır varsa ve yalnızca fazladan bir satırı ilk kez eklemek isterseniz, aşağıdaki gibi yeniden çalışabilirsiniz:
sed -e '/^ *CLIENTSCRIPT="foo"/b ins' -e b -e ':ins' -e 'a\'$'\n''CLIENTSCRIPT2="hello"' -e ': done' -e 'n;b done' file
(bu, satır ekleme kodundan sonra sadece dosyanın geri kalanında dolaşan ve bir daha asla ilk sed komutuna geri dönmeyen bir döngü oluşturur).
Satırın bir yorumda, diyelim veya girintili olması durumunda, eşleşen desene bir '^ *' eklediğimi fark edebilirsiniz. % 100 mükemmel değil, ancak yaygın olması muhtemel diğer durumları da kapsar. Gerektiği gibi ayarlayın ...
Bu iki çözüm aynı zamanda (genel çözüm için bir satır eklemeye yönelik), yeni eklenen satırınız çıkışsız ters eğik çizgiler veya "ve" işaretleri içeriyorsa, sed tarafından yorumlanacağı ve büyük olasılıkla olduğu gibi aynı şekilde çıkmayacakları sorununu çözer \n
. \0
eşleşen ilk satır olur. Özellikle önce {{var //} önce veya başka bir sed deyimi vb. Kullanarak her şeyden kaçmanız gereken bir değişkenden gelen bir satır ekliyorsanız kullanışlıdır.
Bu çözüm, komut dosyalarında biraz daha az dağınıktır (alıntı yapmak ve \ n olsa da okunması kolay değildir), bir komutun yerine konacak metni satırın başlangıcına, bir işlevde koymak istemediğinizde girintili çizgilerle. Ben $ '\ n' yeni satır için kabuk tarafından değerlendirilir, normal '\ n' tek tırnaklı değerlerde değil avantaj elde ettim.
Onun perl / hatta awk düşünüyorum daha okunabilir olması nedeniyle kazanabilirsiniz düşünüyorum yeterince uzun Başlarken.