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.