Linux metin işleme araçları — awk, sed ve diğerleri
Bu flood’da Unix benzeri sistemlerde metin işlemede yoğun olarak kullanılan awk
, sed
ve diğer bazı programları tanıtacağım.
Unix benzeri (Linux, macOS) işletim sistemlerinin power user
olarak nitelenen kullanıcılar tarafından sıklıkla tercih edilme sebeplerinden birisi de şüphesiz metin işleme dahil birçok işlemin komut satırından hızlıca ve kolaylıkla yapılabilmesidir.
Bahsedeceğimiz ilk araç bir program olmaktan çok başlı başına bir programlama dili olan awk
'dır. Adını tasarımcılarının Alfred Aho, Peter Weinberger and Brian Kernighan
baş harflerinden almıştır. Benim günlük olarak en fazla kullanıdığım metin işleme aracı da awk
'dır.
Şimdi örneklerle awk
'nın yeteneklerini anlamaya çalışalım. Aşağıdaki ekran çıktısında awk
, ;
(noktalı virgül) ile ayrılmış bir csv
dosyasının ikinci kolonundaki verileri listelemek için kullanılmıştır.

Aşağıdaki örnekte ilk komutta awk
bu kez dosya üzerinde çalışmaktansa kendisine pipe, |
ile yönlendirilen akıştan girdiyi almış ve metni işleyerek geri döndürmüştür. İkinci komutta ise csv
dosyasının sadece ikinci ve üçüncü kolonlarını alıp ,
virgül ile ayırmıştır.

awk
'nın basit bir programdan ziyade bir programlama dili olduğunu söylemiştik. Aşağıdaki ekran çıktısında csv
dosyasında üçüncü kolonda bulunan dosyalar toplanmıştır. awk
'nın metin işleme gücü bu basit örnek üzerinden çok iyi görülebilmektedir.

awk
ile bir metin dosyasının bazı satırları satır numaralarına göre veya içeriklerine göre filtrelenebilir. Aşağıdaki örnekte bu özellikler örneklenmiştir.

awk
'nın yetenekleri ile ilgili umarım yukarıdaki örnekler yeterli ipucunu verebilmiştir. Şimdi sed
(stream editor
)'in yeteneklerini göstermek üzere birkaç örneğe yer verelim. Örneklerden de görülebileceği gibi awk
ve sed
zaman zaman birbirlerinin yerine kullanılabilir.
sed
'in en yoğun kullanımı bir kalıba (pattern
) uyan metinleri değiştirmektir. Aşağıdaki örnekte csv
dosyasında bulunan ;
(noktalı virgül) karakterleri ,
(virgül) karakteri ile değiştirilmiştir.

sed
ile yapılmak istenen değişikliğin standard output
'a basılmasındansa dosyanın üzerine yazılması istenirse -i
opsiyonu kullanılabilir. -i
in place editing
anlamına gelir.

s - substitute
opsiyonu ile değiştirilen satırlar d - delete
opsiyonu ile silinebilir. Aşağıdaki ekran çıktısında bu örneklenmiştir.

awk
ile olduğu gibi sed
ile de satır numaralarına göre satırlar filtrelenebilir. Aşağıdaki ekran çıktısında ilk olarak birinci satır silinmiş sonra da sadece ikinci satır ile üçüncü satırdaki veriler seçilmiştir.

Her ne kadar birçoğunun fonksiyonu awk
ve sed
ile yerine getirilebiliyor olsa da metin işlemek için tr
, cut
, paste
gibi faydalı programlar da bulunmaktadır.
tr - translate
adından da anlaşılabileceği gibi karakter dönüşümü yapar. Aşağıdaki örnekte önce küçük harfler büyük harflere çevrilmiş sonra da ;
karakteri ,
ile değiştirilmiştir.

cut
, awk
'ya benzer şekilde kolonlar şeklinde verilen dosyalardaki bazı kolonları almaya yarar. Aşağıdaki örnekte sadece birinci ve üçüncü kolonlar alınmıştır.

Son olarak paste
, farklı dosyalarda bulunan satırları birleştirmek (merge
) için kullanılır. Aşağıdaki örnekte data.csv
dosyasına satır numaraları eklenmiştir.
