Bir dosyanın komut dosyası düzenlemeleri için POSIX aracı (değiştirilen içeriği standart çıktıya yazdırmak yerine) ex
.
printf '%s\n' 'g/^[^C]*C[^C]*$/d' x | ex file.txt
Tabii ki olabilir kullanmaksed -i
Sed sürümünüz destekliyorsa, sadece en sistemlerinin farklı türlerinde çalıştırmak amacıyla bir senaryo yazıyorsanız taşınabilir değil unutmayın.
David Foerster yorumlarda sordu:
Bir kullandığınız sebebi var mıdır printf
değil echo
gibi falan ex -c COMMAND
?
Cevap: Evet.
İçin printf
vs. echo
o taşınabilirlik meselesi; bkz. printf neden yankıdan daha iyidir? Ayrıca komutları kullanarak yeni satırlar arasında geçiş yapmak daha kolaydır printf
.
İçin printf ... | ex
vs ex -c ...
, bu hata işleme meselesi. Bu özel komut için önemli değil, ama genel olarak önemli; örneğin,
ex -c '%s/this pattern is not in the file/replacement text/g | x' filename
bir senaryoda. Aşağıdakilerle karşılaştırın:
printf '%s\n' '%s/no matching lines/replacement/g' x | ex file
İlki asılır ve girişi bekler; ikincisi EOF ex
komut tarafından alındığında çıkacaktır, böylece kod devam edecektir. Gibi alternatif çözümler vardır s///e
, ancak POSIX tarafından belirtilmezler. Yukarıda gösterilen portatif formu kullanmayı tercih ederim.
İçin g
komuta, orada olmalıdır sonunda bir satır olacak ve ben kullanmayı tercih printf
komutları sarmak için yerine tek tırnak içinde bir yeni satır gömme.
awk
Alan ayırıcının zekice kullanımı !