Wildcards (Joker Karakter) Kullanımı

Wildcards yani joker karakterler, belirli tekrarlanır durumların (işlem, ifade vb.) tek seferde tanımlanmasını sağlayan özel karakterler olarak ifade edilebilir.

AA

Görevleri önceden tanımlı ve geliştirilebilir olay ve kapsam örgüleri oluşturabilen joker karakterlere önceki yazılarda mümkün olduğunca yer vermiştim. Bu yazıda ise bahsi geçen karakterlerin karşıklıklarına daha detaylıca değinmek istiyorum1. GNU/Linux2 ve daha bir çok sistem dahilinde, programlama dillerinin, komutların çoğu tarafından desteklenen wildcards kullanımının odağında performans işlemleri yer almakta3. Tek seferde bir veya daha fazla işlemin tanımlanmasından belirtilen örgü (regex) tarafından eşleşenlerin edinimine bir çok şekilde kullanılabilmekte. Bu işlemlemler 2 ana yapı kapsamında ifade edilmekte. Çoğunlukla karşımıza çıkan kullanım biçimi4 olan Globbing patterns (standart joker karakterler) ve metin arama ve manüple etme amacıyla kullanılan regular expressions (düzenli ifadeler).

Wildcards (Joker Karakter) Kullanımı

Basit ifadelerden örgüler oluşturan blok ifadelere bir çok şekilde dosya/klasör ve metin işlemleri gerçekleştirmemize olanak sağlayan joker karakterleri kullanırken dikkat etmemiz gereken bir nokta var, komut satırı üzerinden bir dosya veya dizine referans gösterirken aslında bir yön (path) belirtmiş oluyoruz. Joker karakterlerle bu referans gösterme işlemi tek dosya yerine dosyalar, tek dizin yerine dizinlerin ve tek metin/karakter yerine karakter ve metinlerin referans gösterilmesi olarak özetlenebilir.

Wildcards

En basit ve yaygın joker karakterlerden biri yıldız (* / asterisk) olarak gösterilebilir. Temelde her şeyi kapsayan özelliği ile boşluk tanımlama amacıyla kullanılır. Örnek üzerinden açıklamak gerekirse aşağıdaki kod bulunulan dizinde adına bakılmaksızın uzantısı jpg olan tüm dosyaları listeleyecektir.

ls -la *.jpg

Yukarıdaki kodda kullanılan yıldız (* asterisk) herhangi bir isim karşılığı taşımaktadır.

Wildcards glob

Standard Wildcards (Globbing Patterns)

Standart joker karakterler (globbing patterns) çoğunlukla çoklu dosya işlemleri gerçekleştirmek amacıyla kullanılmakta. Neredeyse her komutla birlikte kullanılabilen bu karakterlerle ilgili detaylı bilgi için man glob komutunu kullanabilirsiniz. O halde karakterlere biraz daha yakından bakalım.

? (question mark / soru işareti)

Herhangi bir karakteri ifade eder. Örneğin, bir klasör içerisinde **bg-*.jpg, bg-?.jpg, bg-A.jpg, bg-b.jpg, bg-0.jpg**… gibi dosyalarımız olsun. Bu dosyaları listeleyebilmek için kullanacağımız komut şu şekilde olacaktır.

ls -la /Users/ceaksan/Desktop/lp/img/bg-?.jpg

? kullanımını * karşılaştırmasıyla birlikte iletiyorum.

Joker karakterler

* (asterisk / yıldız)

Yıldız karakteri “karakter(ler)” karşılığını vermektedir. Yukarıdaki örnekte tek karakter karşılığını veren soru işareti karakterinden farklı olarak eşleşmelerinde sayı limiti taşımaz.

[ ] (square brackets / köşeli parantez)

Tanımlı ifadeler ya da aralıklar kullanılabilir. Virgün belirtilen ifade alternatiflerini, orta tire/kısa çizgi işareti (-, hyphen) ise tanımlı bir aralığı/diziyi belirtir.

Ozel karakter koseli parantez

Örneğin aşağıdaki kod 0 ile 9 arasındaki sayılarla eşleşen dosyaları listeleyecektir.

ls -la /Users/ceaksan/Desktop/lp/img/bg-[0-9].jpg

{ } (curly brackets / süslü ayraç / küme işareti)

Kullanımı köşeli parantez ile benzeşmektedir. Birden çok ifade virgülle belirtilir.

ls -la /Users/ceaksan/Desktop/lp/img/bg-{0-9}.jpg
Wildcards joker karakter

\ (backslash / ters bölü)

“escape” karakter olarak ifade edilir. Özel karakterlerin yeteneklerini kaybedip karakter gibi davranmalarını sağlar. Örneğin, dizinimizde, adında * karakterini barındıran bir dosyamız olsun. Bu dosyayı çağırmak için * karakterini kullandığımızd diğer eşleşmeler de dahil edilecektir.

Wildcards kullanim

Yukarıdaki karakterleri ayrıca kullanmak için ters bölü ya da tek tırnak işareti kullanılabilir.

Wildcards kullanimi

Regular Expressions

Daha öncesinde Regular Expressions (RegEx) ile ilgili detaylara değinmiştim5. Bu yazıda konuyla ilgili çok daha temel açıklamalarda bulunacağım.

. (dot / nokta)

Standard Wildcards altındaki soru işareti (?) ile aynı özelliğe sahip.

.* (dot ve asterisk / nokta ve yıldız)

Standard Wildcards altındaki yıldız işareti (*) ile aynı özelliğe sahip.

^ (caret / şapka / ters v)

“Satırın başındaki” şeklinde durum belirtir. Örneğin ^6 6 ile başlayan satırları ifade eder.

Regex

$ (dollar sign / dolar işareti)

“Satırın sonundaki” şeklinde durum belirtir. Örneğin ^0 0 ile biten satırları ifade eder. Yukarıdaki görselde bir çok özel karakterin yer aldığı bir işlemin gerçekleştiğini görebilirsiniz. Tanımlanan örgü dökümanın ilk ve sonuna bakıp örgü ile eşleşen alanları işaretlemekte.

| (vertical bar, düz çizgi)

“Ya da” ifadesini temsil eder. Tırnak dışında ters bölü (\, backslash) ile belirtilmezse pipe ifadesi olarak algılanacaktır.

Ls grep wildcards

[^]

[!] gibi, “değil” ifadesini temsil eder. Örneğin aşağıdaki kod bg- ile başlayan ve sonrasında 0 ile 9 arasında bir sayıyla devam eden tüm farklı tipteki dosyaları listeler. Buradaki düz çizgi (|) özel karakter değil, ls koduyla grep komutunun beraber işlenmesini sağlayan pipe ifadesidir. Grep listelenen dosyalar arasından 6 ile 9 arasında olmayanları işaretler. Aşağıdaki görselde farklı şekillerde de kullanımlarını görebilirsiniz.

ls -la bg-[0-9].* | grep -v "bg-[^6-9]"
Posix standard wildcards

POSIX Standard Temelli Tanımlandırmaları

  • [:alnum:] alfanümerik karakterler6
  • [:alpha:] alfabetik karakterler
  • [:cntrl:] kontrol karakterler7
  • [:digit:] 0’dan 9’a rakamlar.
  • [:xdigit:] heksadesimal sayılar.
  • [:graph:] grafiksel olarak yazdırılabilir karakterler (boşluk hariç)
  • [:lower:] küçük harfler
  • [:upper:] büyük harfler
  • [:print:] grafiksel olarak yazdırılabilir karakterler (boşluk dahil)
  • [:punct:] noktalama işaretleri8
  • [:space:] boşluk, tab, yeni satır vb.