ACIK KAYNAK
 
*
Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun. Aralık 02, 2008, 05:46:29 ÖS


Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz



Reklamlar
Sayfa: [1]   Aşağı git
  Yazdır  
Gönderen Konu: Ders 9. joker karakterler, Giriş  (Okunma Sayısı 102 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
fazlamesai
Global Moderator
***
Offline Offline

Mesaj Sayısı: 36



Üyelik Bilgileri
« : Ağustos 09, 2007, 01:08:05 ÖS »

Günlük Linux kullanımında çok defa bir operasyonu tek seferde birden fazla nesne için çalıştırmak isteyebileceğiniz (rm gibi) durumlarla karşılaşabilirsiniz. Böyle durumlarda, aşağıdaki gibi bütün dosyaları komut satırına yazmak çok gereksizdir:

$ rm dosya1 dosya2 dosya3 dosya4 dosya5 dosya6 dosya7 dosya8

Bu problemi çözmek için, Linux'un kendi içinde yer alan joker karakter desteğinin getirdiği avantajdan yararlanabilirsiniz. Aynı zamanda (tarihsel nedenlerden dolayı) \globbing" olarak da adlandırılan bu destek, joker karakter modelini kullanarak tek seferde birden fazla dosyayı belirlemenize olanak sağlar. Bash ve diğer Linux komutları joker karakter modeline bakarak ve dosya sistemi üzerinde bu modele uyan dosyaları bularak komutu yorumlar. Bu durumda diyelim ki bulunduğumuz dizinde dosya1, dosya2, ... , dosya8 isimli dosyalar varsa bu dosyaları aşağıdaki şekilde yok edebilirsiniz:

$ rm dosya[1-8]

   Ya da daha basitçe ismi dosya ile başlayan bütün dosyaları yok etmek istediğinizde aşağıdaki gibi yazabilirsiniz:


$ ls -d /etc/g* /etc/gateways /etc/gconf /etc/gdm /etc/ggi /etc/gimp /etc/gnome /etc/gnome-vfs-2.0 Uyuşmazlıkları (non-matches) Anlamak

/etc/gnome-vfs-mime-magic /etc/gpm-root.conf

/etc/grep-dctrl.rc /etc/groff /etc/group /etc/group.org /etc/gs.Fontmap Veya /etc içinde yer alan ve ismi g ile başlayan tüm nesneleri listelemek istediğinizde aşağıdaki gibi

/etc/gshadow /etc/gtansrc /etc/gtk /etc/gtk-2.0 /etc/guid-resolv.conf

   Peki ya acaba herhangi dosya sistemi nesnesi ile uyuşmayan bir yol belirlendiğinde ne olacaktır? Aşağıdaki örnekte, /usr/bin altında yer alan, asdf ile başlayan ve jkl ile biten bütün dosyaları listelemek istiyoruz:

$ ls -d /usr/bin/asdf*jkl

ls: /usr/bin/asdf*jkl: Böyle bir dosya ya da dizin yok

Uyuşmazlıkları Anlamak, devamı

Bu durumu şöyle açıklayabiliriz. Normalde mevcut dosya sisteminde yer alan bir ya da daha fazla nesne ile uyuşan bir model belirlediğimizde kabuk, yazdığımız modeli her uyuşan nesne boşlukla ayrılacak şekilde listeler. Fakat model herhangi bir nesne ya da nesnelerle uyuşmuyorsa, kabuk ifadeyi olduğu gibi bırakır. Ve sonuçta ls, /usr/bin/asdf*jkl dosyasını bulamaz ve hata verir. Buradaki kural şudur: Kullanılan model, sadece modelin belirlediği nesne ya da nesneler sistemdeki nesnelerle uyuşuyorsa açılmaktadır.

Joker karakter sözdizimi: *

Artık joker karakterlerin nasıl çalıştığını anladığımıza göre, biraz da joker karakterlerin sözdizimine göz atalım. joker karakterler arasında birkaç özel karakter kullanabilirsiniz; işte bunlardan bir tanesi:

* Yıldız (asterix) * işareti sıfır veya daha fazla karakterle eşleşecektir. Bunun anlamı * olan yere herhangi bir şey gelebileceğidir.  örnekler:

/etc/g* belirtimi /etc'nin altında g ile başlayan tüm nesnelerle eşleşir. ı /tmp/my*1 beliritim /tmp'nin altında my ile başlayan ve 1 ile biten tüm nesnelerle eşleşir.

Joker karakter sözdizimi: 

Soru işareti ' ?' herhangi bir tek karakterle eşleşir.  örnekler:

dosyam? belirtimi dosyam ile başlayıp bir tane daha karakter içeren nesnelerle eşleşir.

 /tmp/notlar?txt belirtimi hem /tmp/notlar.txt, hem /tmp/notlar txt dosyasıyla eşleşir, eğer mevcutlarsa.

Joker karakter sözdizimi: 

   Bu joker karakterler ' ?' ile benzerdir, ancak daha fazla kesinlikte ayrım yapma şansını verir. Bu joker karakterleri kullanmak için, [] arasında eşlemek istediğiniz tüm karakterleri koymalşınız. Sonuçta elde edilen eşleşme bu karakterlerin herhangi birinin tek eşleşmesini verecektir. - (eksi) işaretini bir aralık vermek için kullanabilirsiniz, hatta birden fazla aralığı birlikte kullanabilirsiniz.  örnekler:

dosyam[12] belirtimi dosyam1 ve dosyam2 ile eşleşecektir. Wildcard, çalışılan dizindeki en bu dos yalardan en az bir tanesi mevcut olacak şekilde genişletilecektir.

[Cc]hange[Ll]og belirtimi Changelog, ChangeLog, changeLog, ve changelog ile eşleşecektir. Gördü
   ı günüz gibi, köşeli parantez joker karakterlerini kullanmak küçük / büyük harf eşleşmelerindeki
   kombinasyonları yakalamak için faydalı olacaktır.

ls /etc/[0-9]* komutu /etc 'nin altında rakamla başlayan tüm dosyaları listeler.

ls  /tmp/[A-Za-z]* komutu /tmp 'nin altında küçük ya da büyük har e başlayan tüm dosyaları
   listeler.

Joker karakter sözdizimi:

   [!] yaps [] yapsınabenzemektedir. Ancak bu sefer [] parantezde yer alan karakterle eşleştirme yerine, parantezler içerisinde bulunmayan karakterler ile eşleştirme yapılmaktadır.

   • Ornekler:

rm dosyam[!9]

bu komut ismi dosyam9 olan dosya dışındaki tüm dosyaları yok eder.

Joker karakter ile ilgili uyarılar

Burada joker karakter kullanırken dikkat edilmesi gereken bazı noktalara değineceğiz. Bash wildcard ile ilgili  karakterler  (?,  [,  ],  *) yazıldığı zaman buna göre özel bir işlem yapacağından, bir komuta parametre geçirirken bu karakterler kullanılacaksa dikkat edilmelidir. örneğin, [fo]* ifadesini içeren bir dosya yaratmak istediğimizde aşağıdaki yazılı olan komut yapmak istediğimiz şeyi gerçekleştirmeyecektir:

$echo [fo]* > /tmp/yenidosyam.txt

   Eğer [fo]* modeli, dizin içerisinde herhangi bir dosya ile eşleşiyorsa, bu durumda /tmp/yenidosyam.txt dosyası içerisinde görmeyi beklediğiniz  [fo]* ifadesi yerine bu eşleşen dosyaları göreceksiniz. O halde ı cözüm nedir? Bunun için gerekli çözümlerden birisi karakterlerinizi tek tırnak içerisinde yazmanızdır. Bu yaklaşım, kabuğa bu karakterler üzerinde hiç bir joker karakter işlemi yapmaması gerektiğini anlatır.

$echo '[fo]*' > /tmp/yenidosyam.txt

Joker karakter ile ilgili uyarılar, 

Bu yaklaşımı kullandığınızda yeni dosyanız beklediğiniz gibi [fo]* karakter dizimini içerecektir. Alternatif olarak, ters bölü (backslash) kullanarak karakterlerinizin bash için, joker karakter yerine normal karakter anlamına gelmesini sağlayabilirsiniz. (escape characters)

$ echo \[fo\]\* > /tmp/yenidosyam.txt

   Yukarıda anlatılan her iki yaklaşımda aynı şekilde çalışacaktır. Ters bölü (backslash) karakterinin bu ı sekilde kullanımından da bahsettiğimize göre, eğer karakter olarak backslash (n) kullanmak istiyorsanız
   bunu tek tırnak içinde ya da nnşeklinde yazabileceğinizi söyleyebiliriz.

Tek Tırnak ile Çift Tırnağın Kıyaslanması

Çift tırnağın da tek tırnakla aynı şekilde çalışacağını bilmelisiniz, fakat şunu da belirtmek gerekir ki çift tırnak tek tırnağa benzer bir şekilde çalışsa da kabuğunu bazı sınırlı genişletme işlemlerine izin verir. Bu yüzden, yukarıda da gösterilen joker karakter olarak da anlamlı ifadeleri komut olarak kullanacaksanız en iyi seçim tek tırnak olacaktır. Eğer joker karakter genişletmesine ilişkin daha ayrıntılı bilgi edinmek istiyorsanız komut satırında man 7 glob yazınız. Tırnak kullanımına ilişkin daha fazla bilgi edinmek istiyorsanız komut satırında man 8 glob yazarak QUOTING başlıklı bölümü okuyunuz.
Logged

Linux Linux'tur. Windows Hiç Birşey!!!
Sayfa: [1]   Yukarı git
  Yazdır  
 
Gitmek istediğiniz yer:  


[Basit Gorunum]

MySQL ile Güçlendirildi PHP ile Güçlendirildi Powered by SMF 1.1.6 | SMF © 2006, Simple Machines LLC

acikkaynak
XHTML 1.0 Geçerli! CSS Geçerli! Dilber MC Theme by HarzeM