Sed Kullanımı Örnekleri


1.Örnek (Dosya içinde string değiştirme)

Bir dosya içine aşağıdakileri yazıp kaydedin.

İçinde www.deu.edu.tr/berent gecen ifadeyi www.yahoo.com/hasan/sayfam olarak degistirelim

find . -name "*.htm" | while read sfile
do sed 's/www.deu.edu.tr\/berent/www.yahoo.com\/hasan\/sayfam/g'  < ${sfile} > ${sfile}.tmp && mv ${sfile}.tmp ${sfile}
done

dosyaya çalıştırma izni verin.

$ chmod 744 dosyaismi
$ ./dosyaismi

Baska bir örnekte diyelim ki basit olarak  /usr/bin'leri /usr/local/bin yapacaksiniz
 
$ sed  -e  's/\/usr\/bin/\/usr\/local\/bin/g' dosya > yenidosya

2.Örnek (Dosya içinde satır silme)

Bir dosyanın içinde şu ifadeler olsun.

aaaa 1.satir
bbfgfga 2.satir
cfgfg 3.satir
dfgfgfgfa 4.satir
asdasddfgfgfgfa 5.satir


Bu dosyadan ikinci satırı silmek için kullanacağınız aşağıdaki komutu kullanabilirsiniz.

$ sed -e '2 d' dosyaismi

Dosyayı çalıştırdığınızda ekrana çıktısı şu şekilde olacaktır.

aaaa 1.satir
cfgfg 3.satir
dfgfgfgfa 4.satir
asdasddfgfgfgfa 5.satir

Görüldüğü gibi ekran çıktısında 2.satır yok.
Bu değişikliği yeni bir dosyada saklamak için vereceğimiz komut şu şekilde olacaktır.

$ sed -e '2 d' dosyaismi > yenidosyaismi

$ sed -e '2,4 d'  dosyaismi
komutuyla ise dosyanın 2,3 ve 4. satırlarını kesmiş oluruz.

Ekran çıktısı ise şu şekilde olacaktır.

aaaa 1.satir
asdasddfgfgfgfa 5.satir

$ sed -e '2 d' -e '4 d' dosyaismi
komutuyla ise dosyanın sadece 2 ve 4. satırlarını kesip ekrana vermiş oluruz.

Ekran çıktısı ise şu şekilde olacaktır.

aaaa 1.satir
cfgfg 3.satir
asdasddfgfgfgfa 5.satir


Daha Karmaşık Örnekler:


1.Örnek


Dosyamızda aşağıdaki satırların olduğun varsayalım.

#include "strto.c"
#include <stdarg.h>
~

Burada #include "strto.c"  satırını #define _DB_H_  olarak degiştirmek istiyoruz.Komutumuz şu şekilde olacaktır.

$ sed 's/^#include "strto.c"/#define _DB_H_/' yardim

Dosyanın ekran çıkışı aşağıdaki duruma gelmiş olacaktır.

#define _DB_H_
#include <stdarg.h>

2.Örnek


Bir dosyada değiştirilecek iki satır olsun.

Dosyamızın içindeki iki satırı değiştirmek istiyoruz.Bu dosyadaki ifadeler şöyle olsun.

#define TCL_VER "/usr/lib/tcl"
#define TCL_LIBRARY_DIR  "/usr/include/tclcheck"

Bu iki satırı aşağıdaki gibi değiştirmek istiyoruz.

#define TCL_VER "/usr/local/lib/tcl/lib"
#define TCL_LIBRARY_DIR "/usr/local/include/share/tclcheck"

$ sed 's/^#define TCL_VER \+"\/usr\/lib\/tcl"/#define TCL_VER "\/usr\/local\/lib\/tcl\/lib"/ ; s/^#define TCL_LIBRARY_DIR \+"
\/usr\/include\/tclcheck"/#define TCL_LIBRARY_DIR "\/usr\/local\/include\/share\/tclcheck"/'


Burada dikkat edilecek nokta yukardaki komutun tek bir satır olmasıdır.

Eğer yapacağımız iş için dosya sayısı çoksa bazı kolaylıklardan yararlanmak gerekir.Basit bir script ile döngü şemamızı kuralım.Önce yukardaki uzun komutu bir dosyaya yazalım.Dosyamızın ismi degistir1 olsun.Ayrı bir dosya daha açalım ve ismi yap olsun.Bu dosya içinde aşağıdaki basit scripti oluşturalım.

find . -name "*.c" | while read sfile
 do
 ./degistir1 < ${sfile} > ${sfile}.tmp && mv ${sfile}.tmp ${sfile}
 done

Find komutu ile sonu .c ile biten dosyaları buluyoruz.Ve do ile her bulduğu dosyada degistir1 scriptinin iş yapmasını sağlıyoruz.

$ chmod 750 degistir1;chmod 750 yap
$ ./yap

KISA İPUÇLARI



$ sed  s/ahmet/"\t"/g dosyaismi


İçinde ahmet stringi geçen bölümü tab karakterine çevirir.

$ sed  s/ahmet/" "/g dosyaismi

İçinde ahmet stringi geçen bölümü boşluk karakterine çevirir.

Daha geniş bilgi için man sed.

                                                                                                                                        Orhan BERENT