sed Komutu ve Kullanımı
Listeleme, işaretleme, sorgulama gibi işlemlere ek olarak bu yazıda metin dosyalarının içeriğini değiştirmek için kullanabileceğimiz sed komutundan bahsedeceğim.
grep komutuyla benzer şekilde özel karakterleri ([] . * ^ $ ve ) sed ile de kullanabiliriz. Bu kullanıma ek olarak
sed'in ayrıca kendine özgü kuralları da olduğunu unutmamalıyız. Ayrıca,
sed komutuyla sağlanan değişiklikler aksi ifade edilmediği sürece orjinal dosya üzerinde herhangi bir değişikliğe neden olmaz.
Sed komutunun parametrelerini şu şekilde sıralayabiliriz:
a\
- Aktif satır altına ekleme yap.
c\
- Aktif satırı verilen kelime/cümle ile değiştir.
d
- Yazıyı sil.
i\
- Aktif satırın yukarısına ekleme yap.
p
- Yazıyı dök.
r
- Dosyayı oku.
s
- Bul ve değiştir.
w
- Dosyaya yaz.
Parametrelere ek opsiyonlar ise şöyle:
-e script
- Birden fazla sed opsiyonu tanımla.
-f
- Sed komutlarının olduğu bir bash script dosyasını çalıştır.
Örnek olarak Apache (Unix) Log Samples sayfasındaki log yığınını üzerinden ilerleyeceğim1. İlk işlemimiz
prxint-sxb3.e-i.net isteklerini düzenlemek olsun.
sed -n '/^prxint-sxb3.e-i.net.*/p' ~/access_log
Yukarıdaki kod ile access_log içeriğini taratıp sadece
prxint-sxb3.e-i.net ile başlayan satırları listeletelim (p).
Örneklere devam edelim ve bu defa
access_log dosyasında belirttiğimiz satırın silinerek farklı bir dosya olarak kayıt edilmesini sağlayalım.
sed '/market-mail.panduit.com/d' ~/access_log > ~/test.txt
Silme işlemini satır aralığı belirterek gerçekleştirmek istersek;
sed '2,20d' ~/access_log > ~/test.txt
Yukarıdaki kod 2. satırdan başlayarak 20. satıra kadar olan bölümleri silecek ve sonucu
test.txt dökümanına aktaracaktır. Satır konusunu biraz daha detaylandıralım. Bu defa 5. satırdan başlayarak döküman sonuna kadar silme işlemi uygulayalım.
sed '5,$d'
Bul ve değiştir işleminde ise
s/ parametresinden faydalanacağız ve
panduit.com ifadesini
panduit.org olarak değiştireceğiz2.
sed 's/panduit.com/panduit.org/' ~/access_log > ~/test.txt
Son olarak,
sed komutuyla grep komutunda olduğu gibi birden fazla dosyayla çalışmak mümkün. Belirtmekte fayda var, komut çıktısını tekrar dosyalara geri döndürmek pek mümkün olmayabilir. Bu nedenle işlemleri derleyip harici bir dosyaya aktarmak gibi durumlarda tercih edilebilir.