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.

AA

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).

Sed komutu

Ö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.