Bloğa geri dön

Linux'ta Metni Manipüle Etmek için Sed Akış Düzenleyicisine Genel Bir Bakış

Linux'ta Metni Manipüle Etmek için Sed Akış Düzenleyicisine Genel Bir Bakış

Komut sed stream editor (akış düzenleyici) ifadesinin kısaltmasıdır. Linux/UNIX sistemlerinde oldukça popüler bir araçtır. Sed tek başına bir metin editörü değildir. Ancak, verilen bir metni manipüle etmek için çeşitli değişiklikler gerçekleştirebilir. Metin girdisi bir akış olarak gönderilir. Sed ardından akış üzerinde talimat verilen eylemleri gerçekleştirir. Bu kılavuz komutuna genel bir bakış sunar ve sed komutunun Linux'ta metni başarıyla manipüle etmek için nasıl çalıştırılacağını açıklar.

Linux'ta Sed

Girdi akışı sed bir metin dosyasından veya STDIN'den (standart girdi) gelebilir. Başka bir komutun çıktısıyla çalışabilir veya doğrudan bir metin dosyasıyla çalışabiliriz. sed aracı tüm Linux dağıtımlarında önceden yüklü olarak gelir.

Sed Kullanımına Genel Bakış

The sed komutu aşağıdaki yapıyı takip eder:

Gösterim amacıyla, şu belgenin metin sürümünü aldık: GPL lisansı sürüm 3:

Manipulate Text with Sed 7

Aşağıdaki sed komutu metin dosyasının içeriğini yazdıracaktır:

Burada, sed tek tırnak içinde tanımlanan işlemleri gerçekleştirir ve çıktıyı yazdırır. Herhangi bir seçenek tanımlanmadığı için, sed sadece boş bir işlem gerçekleştirecek ve dosyanın tüm içeriğini yazdıracaktır.

Sed girdi akışı olarak farklı bir komutun çıktısını da kabul eder. Bir sonraki örnekte, GPL v3 metin dosyasının içeriğini boş bir işlem gerçekleştirmesi için sed komutuna yönlendirin (pipe):

Satırlar Nasıl Yazdırılır

Herhangi bir seçenek verilmediğinde, sed dosyanın tüm içeriğini doğrudan yazdıracaktır. Bunun yerine, sonuçları doğrudan standart çıktıya (STDOUT) yazdırmak için yazdırma komutunu açıkça gönderebiliriz.

Çıktıyı yazdırmak için şu karakteri kullanın: p:

Manipulate Text with Sed 6

Varsayılan olarak, sed çıktıyı ekrana yazdırır. Özellikle yazdırma komutunu kullandığımız için, sed her satırı iki kez yazdıracaktır. Sed satır satır çalışır. Bir satırı okur, belirli işlemleri gerçekleştirir, yazdırır ve bir sonraki satıra geçer.

Gördüğümüz gibi, her satır iki kez yazdırılıyor. Eğer sonuç bu şekilde kafa karıştırıcıysa, bunu -n seçeneğini kullanarak temizleyebiliriz. Bu seçenek otomatik yazdırma işlevini bastırır. Yazdırma komutunu gönderdiğimiz için varsayılan çıktı yazdırma işlevinin etkinleştirilmesine ihtiyacımız yoktur:

Regex Karakter Sınıfları

Düzenli ifadelerde (regular expressions) çeşitli karakter sınıfları vardır. Bu sınıfların her birinin bir aralığı bulunur. Birçok sınıfın birden fazla ifadesi de vardır. Çoğu sınıf karakter aralıklarıdır:

    • [a-z]: Küçük harf
    • [A-Z]: Büyük harf
    • [0-9]: Rakamlar
    • [a-zA-z]: Alfabe
    • [a-zA-z0-9]: Herhangi bir alfanümerik karakter

Bu karakter sınıflarının farklı gösterimleri de vardır:

    • [:lower:]: Küçük harf
    • [:upper:]: Büyük harf
    • [:digit:]: Rakamlar
    • [:alpha:]: Alfabe
    • [:alphanum:]: Alfanümerik karakter

Örneğin, aşağıdaki komut en az bir rakam içeren tüm satırları yazdıracaktır:

Manipulate Text with Sed 3

Adres Aralıkları

Metin akışının çalışılacak belirli bir bölümünü belirtebiliriz. Bu, bir satırın statik konumu veya bir satır aralığı olabilir. İlk örnekte, GPL v3 metin dosyasından 5. satırı yazdıracağız:

$ sed -n

Tek bir satır yerine, çalışılacak bir satır aralığı da belirtebiliriz. Burada, sed komutunun üzerinde çalışacağı 5. satırdan 9. satıra kadar olan adres aralığını (toplam 5 satır) belirttik:

gpl-3.0.txt

Satır adresini belirtmenin farklı yolları da vardır. Satır numaralarını kendimiz belirlemek yerine, önceki örneği sed komutunun 5. satırdan başlamasını ve sonraki 5 satır üzerinde işlem yapmasını sağlayacak şekilde yeniden düzenleyebiliriz:

5,+5p

Satırları belirtmenin başka bir yolu da aralıkları kullanmaktır. Bir sonraki örnekte, sed 1. satırdan başlayacak ve her iki satırda bir işlem yapacaktır:

Metin Silme

Şimdiye kadar hedef metin satırlarını yazdırmak üzerinde çalıştık. Yazdırmak yerine, satırları çıktıdan kaldırabiliriz. Aşağıdaki örnekte, başlangıçtan itibaren birden fazla satırı kaldıracağız. Burada, şu seçeneği kullanmamıza gerek yok: -n çünkü sed silinmeyen diğer her şeyi yazdırmasını istiyoruz. Satır silme için şu seçeneği kullanacağız: d:

Manipulate Text with Sed 2

Kaynak dosyanın hala bozulmadığına dikkat edin. Sed sadece çıktı sırasında satır silme işlemini gerçekleştiriyor. İsterseniz, sed çıktısını bir dosyaya kaydedebilirsiniz. Orijinal dosyanın üzerine yazabilir veya farklı bir dosya olarak kaydedebilirsiniz:

Çıktıyı manuel olarak bir dosyaya yazmak yerine, sed orijinal dosya üzerinde yerinde düzenleme gerçekleştirebilir. Kısacası, sed orijinal dosyayı düzenleyecek ve yapılan tüm değişiklikleri yazacaktır. Bu yöntem orijinal dosyanın üzerine yazacaktır, bu nedenle dikkatli kullanılmalıdır:

Yerinde düzenleme tehlikeli olduğu için, sed yedekleme özelliğiyle birlikte gelir. Yerinde düzenlemeler yaparken, düzenlemeden önce yedek almak için -i.bak yerine -i kullanın. Sed yedek dosyasını .bak uzantısıyla oluşturacaktır:

Metin Değiştirme

Bu, açık ara en yaygın sed uygulamalarından biridir. Bir metin desenini arar ve bu deseni verilen bir metinle değiştirir. Burada metin deseni düzenli ifadelerle (kısaca regex) tanımlanır. Regex kullanımı hakkında daha fazla bilgi edinmek için, dosyalarda metin desenlerini aramak için regex ile Grep'in nasıl kullanılacağını özetleyen bu kılavuzu takip edin.

İşte regex kullanan en temel metin değiştirme örneği:

Burada, s değiştirme komutudur. Eğik çizgiler, desen ve değiştirilecek metin için sınırlayıcılardır. Hadi bunu uygulamaya koyalım:

Manipulate Text with Sed 5

Bir sonraki örnek, alt çizginin (_) kullanımını gösterecektir. Burada alt çizgiler sınırlayıcı görevi görecektir:

Burada, com/index ifadesini arayıp net/home ile değiştiriyoruz. Alt çizgilerin yerleşimine dikkat edin, çünkü bunlar çok önemlidir. Örneğin, son alt çizgiyi kaçırırsanız, sed bir hata verecektir:

Bazı değiştirmeleri pratik etmek için sahte bir dosyaya ihtiyacımız var. Burada, GPL v3 metin dosyasının kırpılmış bir sürümüne sahibim:

Hadi bazı temel metin değiştirmeleri gerçekleştirelim:

Bir sonraki örneğe göz atın. Tüm the örneklerini THE :

$ echo

Bir şey fark ettiniz mi? Sed tüm the örneklerini değiştirmedi. Aslında, sadece ilk örneği değiştirdi. Neler oluyor? Bu, s seçeneğinin varsayılan davranışıdır. Belirli bir satırın yalnızca ilk eşleşmesini bulur ve bir sonrakine geçer. sed komutunun arama deseni için tüm satırı kontrol etmesini sağlamak için isteğe bağlı bir g bayrağı kullanmamız gerekir. Hadi komutu düzeltelim:

Şimdi istendiği gibi çalışıyor. Komutu kullanmanın bir başka ilginç yolu da değiştirilecek eşleşme sayısını belirtmektir. Önceki örnekte 3 adet the vardı, değil mi? Sadece 3.üncü eşleşmeyi değiştirmeyi belirtmeye ne dersiniz? Değişiklik isteğe bağlı bayrakta gerçekleşecektir:

Büyük bir metin dosyasıyla çalışıyorsanız, sed komutunun yalnızca değiştirme yapılan satırları yazdırması yararlı olabilir. Bunu sağlamak için başka bir ek bayrak eklememiz gerekir: p:

Manipulate Text with Sed 4

Büyük/Küçük Harf Duyarlılığı

Varsayılan olarak, tüm sed işlemleri büyük/küçük harfe duyarlıdır. Aşağıdaki komut, büyük/küçük harf duyarlılığının varsayılan davranışını gösterecektir:

$ echo "HELLO WORLD"

Harf uyuşmazlığı nedeniyle hiçbir değişiklik olmaz. Böyle bir durumda, sed komutuna büyük/küçük harf duyarlılığını devre dışı bırakmasını söyleyebiliriz. Bunu yapmak için isteğe bağlı şu bayrağı ekleyin: i:

Metinler Nasıl Değiştirilir ve Referans Gösterilir

The power of sed 'in gücü, çoğunlukla düzenli ifade kullanabilme yeteneğinde yatar. Daha gelişmiş ve karmaşık regex kalıplarıyla çok daha fazlasını başarabiliriz. Örneğin, bir dosyanın başından belirli bir konuma kadar olan metni değiştirebiliriz. Aşağıdaki ifadeye bir göz atın:

Burada, şapka karakteri (^) satırın başlangıcını belirtir. Herhangi bir karakterle eşleşme operatörü nokta (.) ile gösterilir. Yıldız işareti (*) ise satırın başından şuraya kadar eşleşen joker karakter ifadesidir: GNU.

Diğer bir ilginç ipucu ise & sembolünü kullanmaktır. Bunu, sed komutunun arama kalıbını bulduğu alanları vurgulamak için kullanabiliriz:

Manipulate Text with Sed

Son Düşünceler

Bu eğitimde, sed komutunun temellerini inceledik. Belirli satırları yazdırmayı, metin aramayı, metinleri silmeyi ve değiştirmeyi, metinlerin üzerine yazmayı ve düzenli ifadeleri kullanmayı öğrendik. Düzgün yapılandırılmış bir sed komutu, bir metin belgesini büyük ölçüde dönüştürebilir. Artık sed.

yardımıyla Linux'ta metinleri başarıyla manipüle edebilirsiniz. Keyifli Bilişimler!

author

Hark Labs

Yazar · CloudSigma

Preslav Dobrev, CloudSigma'da Kreatif Tasarımcı olarak görev yapmakta olup geleneksel ve yenilikçi pazarlama kanallarını kullanarak tutarlı bir kurumsal kimlik oluşturmaya odaklanmaktadır. Sanatsal vizyonu stratejik pazarlamayla harmanlayarak etkili marka anlatıları oluşturma konusunda oldukça yeteneklidir.

Yorumlar

Henüz yorum yapılmamış. İlk siz olun.