Giriş
cut komutu, metin dosyalarından belirli alanları, karakterleri veya baytları kesmek ve çıkarmak için kullanılan güçlü bir Unix/Linux aracıdır. Özellikle log dosyaları, CSV verileri ve yapılandırılmış metinlerdeki belirli bölümleri ayıklamak için yaygın olarak kullanılır. Bu kılavuzda, cut komutunun temel ve ileri düzey kullanımlarını, yaygın senaryoları ve hata ayıklama yöntemlerini detaylı olarak inceleyeceğiz.
Temel Kullanım
cut komutu üç temel modda çalışır: alan seçimi (-f), karakter seçimi (-c) ve bayt seçimi (-b). Varsayılan ayraç karakteri TAB (\t) olup, bu ayar -d parametresi ile değiştirilebilir.
Alan Seçimi (-f)
Alan seçimi, metin dosyalarındaki belirli sütunları (alanları) çıkarmak için kullanılır. Bu mod varsayılan olarak TAB ayraçlı dosyalar için optimize edilmiştir.
Temel alan seçim komutları:
# Tek bir alanı seçmek
cut -f1 file.txt
# Birden fazla alanı seçmek (virgülle ayrılmış)
cut -f1,3 file.txt
# Ardışık alan aralığı seçmek
cut -f1-4 file.txt
# Belirli bir alandan sonuna kadar seçmek
cut -f2- file.txt
# Başlangıçtan belirli bir alana kadar seçmek
cut -f-3 file.txt
Ayraç Ayarlama (-d)
Metin dosyalarında farklı ayraçlar kullanıldığında, -d parametresi ile ayraç belirtmek gerekir. Örneğin, CSV dosyalarında genellikle virgül (,) ayraç olarak kullanılır.
# Virgül ayraçlı dosyada ilk alanı seçmek
cut -d',' -f1 file.csv
# İki nokta üst üste (:) ayraçlı dosyada 1. ve 3. alanları seçmek
cut -d':' -f1,3 /etc/passwd
# Boşluk ayraçlı dosyada ikinci alanı seçmek
cut -d' ' -f2 file
İpucu: Eğer dosyada ayraç karakteri bulunmayan satırlar varsa ve bunları çıkarmak istiyorsanız
-sparametresini kullanabilirsiniz. Bu parametre, ayraç içermeyen satırları tamamen atlar.
Çıkış Ayraçlarını Değiştirme
Varsayılan olarak, cut komutu çıkışta da aynı ayraç karakterini kullanır. Farklı bir ayraç kullanmak için --output-delimiter parametresini kullanabilirsiniz.
# Çıkış ayraçlarını alt çizgi (_) olarak ayarlamak
cut --output-delimiter='_' -f1,3 file.txt
Karakter ve Bayt Seçimi
cut komutu, alan seçimi dışında karakter ve bayt bazında da seçim yapabilir. Bu özellik, sabit genişlikli dosyalar veya belirli karakter pozisyonlarını çıkarmak gerektiğinde kullanışlıdır.
Karakter Seçimi (-c)
Karakter seçimi, metin dosyalarında belirli karakter pozisyonlarını çıkarmak için kullanılır. Bu mod, Unicode karakterleri de destekler.
# İlk 10 karakteri seçmek
cut -c1-10 file.txt
# 3. karakterden sonuna kadar seçmek
cut -c3- file.txt
# Belirli karakter pozisyonlarını seçmek (1, 4, 7)
cut -c1,4,7 file.txt
Bayt Seçimi (-b)
Bayt seçimi, dosyadaki bayt pozisyonlarına göre seçim yapar. Bu mod, ikili dosyalar veya karakter kodlamasıyla ilgili sorunlar yaşandığında kullanılır. Ancak, çok baytlı karakterler (örneğin UTF-8) için doğru sonuç vermeyebilir.
# İlk 5 baytı seçmek
cut -b1-5 file.txt
# Belirli bayt pozisyonlarını seçmek (5, 9, 13)
cut -b5,9,13 file.txt
Uyarı:
-bparametresi, çok baytlı karakterler için doğru sonuç vermeyebilir. Bu durumda-cparametresini kullanmak daha güvenlidir.
Seçimi Tersine Çevirme ve Diğer Araçlarla Birleştirme
cut komutu, seçilen alanların dışındaki tüm içerikleri çıkarmak için --complement parametresini destekler. Ayrıca, diğer komutlarla zincirleme olarak kullanılabilir.
Seçimi Tersine Çevirme
# 1. ve 3. alanlar dışındaki tüm alanları seçmek
cut -f1,3 --complement file.txt
# 1-5. karakterler dışındaki tüm karakterleri seçmek
cut -c1-5 --complement file.txt
Diğer Araçlarla Birleştirme
cut komutu, genellikle diğer komutlarla birlikte kullanılarak daha güçlü veri işleme senaryoları oluşturulabilir.
# /etc/passwd dosyasından kullanıcı adlarını ve giriş kabuklarını çıkarmak
cut -d':' -f1,7 /etc/passwd
# PATH değişkeninin ilk girişini çıkarmak
echo "$PATH" | cut -d':' -f1
# CSV dosyasının ikinci sütununu çıkarmak
cut -d',' -f2 data.csv
Yaygın Kullanım Senaryoları
Aşağıda, cut komutunun gerçek dünya senaryolarında nasıl kullanılabileceğine dair bazı örnekler bulunmaktadır.
Sistem Kullanıcılarını Listelemek
# Tüm sistem kullanıcılarını listelemek
getent passwd | cut -d':' -f1
Kullanıcının Varsayılan Kabuğunu Bulmak
# Mevcut kullanıcının varsayılan kabuğunu bulmak
grep "^$USER:" /etc/passwd | cut -d':' -f7
Tekrarlanan Boşlukları Normalleştirmek ve Alan Seçmek
# Tekrarlanan boşlukları tek boşlukla değiştirmek, ardından ikinci alanı seçmek
echo "one two three" | tr -s ' ' | cut -d' ' -f2
Dosya İzinlerini Çıkarmak
# Bir dosyanın izin dizgisini çıkarmak
ls -l file.txt | cut -c1-10
Giriş Yapan Kullanıcıları Listelemek
# Giriş yapan kullanıcıları listelemek ve tekilleştirmek
who | cut -d' ' -f1 | sort -u
Hata Ayıklama ve Yaygın Sorunlar
cut komutunu kullanırken karşılaşılan yaygın sorunlar ve çözümleri aşağıda listelenmiştir.
Tüm Satırın Değişmeden Yazdırılması
Sorun: Dosya içeriği değişmeden çıktılanıyor.
Çözüm: Doğru ayraç karakterini kullanmadığınız için olabilir. Varsayılan ayraç TAB (\t) olup, dosyanızda farklı bir ayraç kullanılıyorsa
-dparametresi ile belirtin.# Örnek: Virgül ayraçlı CSV dosyası cut -d',' -f1 file.csv
Ayraç İçermeyen Satırların Yazdırılması
Sorun: Ayraç içermeyen satırlar da çıktılanıyor.
Çözüm:
-sparametresini kullanarak ayraç içermeyen satırları atlayabilirsiniz.cut -s -d',' -f1 file.csv
Birden Fazla Seçim Modunun Kullanılması
Sorun:
-f,-bve-cparametreleri aynı komutta kullanılamıyor.Çözüm: Her komutta yalnızca bir seçim modu kullanın. Örneğin, hem alan hem de karakter seçimi yapmak istiyorsanız, komutları ayrı ayrı çalıştırın veya
awkgibi daha esnek bir aracı kullanın.
Çok Baytlı Karakterlerin Bozulması
Sorun: UTF-8 gibi çok baytlı karakterler bozuluyor.
Çözüm:
-cparametresini kullanarak karakter bazında seçim yapın.-bparametresi bayt bazında seçim yaptığı için çok baytlı karakterlerde sorunlara yol açabilir.cut -c1-10 file.txt
Tekrarlanan Boşlukların Yanlış Ayrılması
Sorun: Tekrarlanan boşluklar farklı alanlar olarak algılanıyor.
Çözüm:
cutkomutu ayraçları birebir dikkate alır. Tekrarlanan boşlukları normalleştirmek içintr -skomutunu kullanın veyaawkgibi daha esnek bir araç tercih edin.echo "one two three" | tr -s ' ' | cut -d' ' -f2
İlgili Kaynaklar ve İleri Düzey Kullanımlar
cut komutunun yanı sıra, metin işleme işlemlerinde sıkça kullanılan diğer komutlar hakkında daha detaylı bilgiye sahip olmak için aşağıdaki kaynaklara göz atabilirsiniz.
- Linuxize: cut Komutu Kılavuzu - cut komutunun tam kılavuzu ve örnekler.
- Linuxize: awk Komutu Kılavuzu - Desen tabanlı alan çıkarma ve metin işleme.
- Linuxize: tr Komutu Kılavuzu - Karakterleri dönüştürme ve sıkıştırma.
- Linuxize: sort Komutu Kılavuzu - Satırları sıralama ve filtreleme.
- Linuxize: grep Komutu Kılavuzu - Eşleşen satırları arama ve filtreleme.
Sonuç
cut komutu, Linux/Unix ortamlarında metin dosyalarından belirli bölümleri hızlı ve verimli bir şekilde çıkarmak için kullanılan temel bir araçtır. Alan, karakter ve bayt bazında seçim yapabilme özelliği, çeşitli veri işleme senaryolarında kullanılmasını sağlar. Bu kılavuzda ele alınan temel ve ileri düzey kullanımlar, cut komutunu daha etkili bir şekilde kullanmanıza yardımcı olacaktır.
Unutmayın ki, cut komutu bazı sınırlamalara sahiptir. Örneğin, çok karmaşık desenler için awk gibi daha güçlü araçlar tercih edilebilir. Bununla birlikte, basit ve hızlı metin işleme gereksinimleri için cut komutu ideal bir seçimdir.


