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