Yaptığınız şey SUBSTITUTETHIS
dosyada göründüğü her yerde kaldırmak (ancak göründüğü satırın geri kalanını değil) ve temp.TXT
bu satırın içeriğini eklemek . EğerSUBSTITUTETHIS
bir satırda birden çok kez görünür, sadece ilk olay kaldırılır ve yalnızca bir kopyası temp.TXT
eklenir.
SUBSTITUTETHIS
Göründüğünde çizginin tamamını değiştirmek istiyorsanız , d
komutu kullanın. Her ikisini de çalıştırmanız gerektiğinden r
ve d
bir maç olduğunda, bunları hazır bir gruba koyun.
sed -e '/SUBSTITUTETHIS/ {' -e 'r temp.TXT' -e 'd' -e '}' -i devel.txt
Bazı sed uygulamaları, komutları ayırmak için noktalı virgül kullanmanıza ve ayraçları parantezlerin etrafında tamamen atlamanıza izin verir, ancak yine de argümanı r
komuta :
sed -e '/SUBSTITUTETHIS/ {r temp.TXT
d}' -i devel.txt
Değiştirmek isterseniz SUBSTITUTETHIS
Dosyanın içeriği , ancak ondan önce ve sonra gelenleri saklamak daha karmaşıktır. En basit yöntem, dosyanın içeriğini sed komutuna dahil etmektir; içeriğini doğru şekilde alıntılamanız gerektiğini unutmayın.
sed -e "s/SUBSTITUTETHIS/$(<temp.TXT sed -e 's/[\&/]/\\&/g' -e 's/$/\\n/' | tr -d '\n')/g" -i devel.txt
Veya Perl kullanın. Bu kısa ama çalışıyorcat
her değişiklik için bir kez :
perl -pe 's/SUBSTITUTETHIS/`cat temp.TXT`/ge' -i devel.txt
Komut dosyası başladığında dosyayı bir kez okumak ve bir kabuk komutuna bağlı kalmaktan kaçınmak için:
perl -MFile::Slurp -pe 'BEGIN {$r = read_file("temp.TXT"); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt
(okunabilirlik için iki satırda sunulur, ancak satır sonunu atlayabilirsiniz). Dosya adı değişkense, alıntılama sorunlarından kaçınmak için bir ortam değişkeni yoluyla komut dosyasına iletin:
replacement_file=temp.TXT perl -MFile::Slurp -pe 'BEGIN {$r = read_file($replacement_file); chomp($r)}
s/SUBSTITUTETHIS/$r/ge' -i devel.txt