← Bash tools
TEKNİK REHBER BASH TOOLS METİN İŞLEME 2026

tr ve wc
dönüştür ve say

İki küçük, tek amaçlı araç. tr karakterleri bire-bir dönüştürür veya siler — sed'in basit hali. wc satır, kelime ve byte sayar — pipeline'ın ölçüm noktası.

00 İki aracın rolü

tr ve wc tek satır araçlar — küçük ama pipeline'ın vazgeçilmezleri.

bash — anlık kullanım
# Büyük harfe çevir
echo "merhaba dünya" | tr 'a-z' 'A-Z'
MERHABA DÜNYA

# Satır sayısı
wc -l /etc/passwd
42 /etc/passwd

# Kelime sıklığı: kelimelere böl, say, sırala
tr -cs 'A-Za-z' '\n' < metin.txt | tr 'A-Z' 'a-z' | \
  sort | uniq -c | sort -rn | head -10

01 tr: temel karakter dönüşümü

tr SET1 SET2 SET1'deki her karakteri, SET2'nin karşılık gelen karakteriyle değiştirir. Dosya adı almaz — sadece stdin.

bash
# Küçük → büyük harf
tr 'a-z' 'A-Z' < dosya.txt

# Büyük → küçük harf
tr 'A-Z' 'a-z' < dosya.txt

# Boşlukları alt çizgiye dönüştür
echo "merhaba dünya" | tr ' ' '_'
merhaba_dünya

# Virgülleri sekmeye (CSV → TSV)
tr ',' $'\t' < data.csv

# Satır sonlarını boşluğa (çok satırı tek satıra)
tr '\n' ' ' < liste.txt

# Birden fazla karakter eşleme
tr 'aeiou' 'AEIOU' < dosya.txt   # sadece ünlüleri büyüt

# Özel karakterler: \n \t \r \\ gibi kaçış dizileri
tr '\r\n' '\n\n' < windows.txt  # CRLF → LF
tr '\r' ''  < windows.txt       # \r kaldır (dikkat: SET2 boş olmaz)
tr -d '\r' < windows.txt       # \r sil (-d ile doğrusu)
tr SADECE STDIN OKUR

tr 'a-z' 'A-Z' dosya.txt çalışmaz — dosya.txt argüman olarak verilse bile yoksayılır, yine stdin bekler. Dosya için yönlendirme: tr 'a-z' 'A-Z' < dosya.txt

02 tr: silme ve sıkıştırma (-d -s)

-d belirtilen karakterleri siler, -s ardışık tekrarları tek karaktere sıkıştırır. İkisi birlikte kullanılabilir.

bash
# Rakamlara sil
echo "abc123def456" | tr -d '0-9'
abcdef

# Noktalama ve özel karakterleri sil
tr -d '[:punct:]' < metin.txt

# Satır sonlarını sil (hepsini tek satıra)
tr -d '\n' < dosya.txt

# -s: ardışık boşlukları tek boşluğa sıkıştır
echo "a    b    c" | tr -s ' '
a b c

# Birden fazla satır sonunu tek satır sonuna (boş satırları kaldır)
tr -s '\n' < dosya.txt

# -d ve -s birlikte: önce sil, sonra sıkıştır
tr -ds '0-9' ' ' < dosya.txt   # rakamları sil, boşlukları sıkıştır

# -c ile tamamlayıcı: sadece harf DEĞİL olanları sil
tr -cd 'A-Za-z\n' < dosya.txt  # harfler ve satır sonu dışını sil
-d SET
SET'teki karakterleri sil (delete)
-s SET
SET'teki ardışık tekrar karakterleri tek karaktere sıkıştır (squeeze)
-c SET
Tamamlayıcı — SET'te olmayan karakterleri seç (complement)

03 tr: karakter sınıfları

POSIX karakter sınıfları ([:alpha:], [:digit:]...) yerel ayara (locale) duyarlıdır ve taşınabilir betiklerde tercih edilir.

bash
# POSIX karakter sınıfları ([:sinif:] formatı)
tr '[:lower:]' '[:upper:]' < dosya.txt  # a-z → A-Z (locale'e uygun)
tr -d '[:digit:]' < dosya.txt           # tüm rakamları sil
tr -d '[:space:]' < dosya.txt           # boşluk karakterlerini sil
tr -d '[:punct:]' < dosya.txt           # noktalama işaretlerini sil
tr -cd '[:print:]\n' < dosya.txt       # yazdırılamaz karakterleri sil
SınıfKarşılığıÖrnek
[:alpha:]Harfler (a-z, A-Z)tr -d '[:alpha:]'
[:digit:]Rakamlar (0-9)tr -cd '[:digit:]'
[:alnum:]Harf + rakamtr -cs '[:alnum:]' '\n'
[:lower:]Küçük harflertr '[:lower:]' '[:upper:]'
[:upper:]Büyük harflertr '[:upper:]' '[:lower:]'
[:space:]Boşluk, tab, \n...tr -s '[:space:]' ' '
[:punct:]Noktalama işaretleritr -d '[:punct:]'
[:print:]Yazdırılabilir karakterlertr -cd '[:print:]\n'

04 wc: satır, kelime, byte say

wc (word count) adına rağmen satır, kelime, karakter ve byte sayar. Bayrak olmadan hepsini birden verir.

bash
# Hepsini göster: satır, kelime, byte
wc dosya.txt
  42  350 2840 dosya.txt
#  ^    ^    ^   ^ dosya adı
#  satır kelime byte

# Sadece satır sayısı
wc -l dosya.txt
42 dosya.txt

# Sadece kelime sayısı
wc -w dosya.txt

# Sadece byte sayısı
wc -c dosya.txt

# Sadece karakter sayısı (UTF-8'de byte ≠ karakter)
wc -m dosya.txt

# En uzun satır kaç karakter?
wc -L dosya.txt

# Stdin'den (dosya adı göstermez)
cat dosya.txt | wc -l

# Sadece sayıyı al (dosya adı olmadan)
wc -l < dosya.txt
42
-l
Satır sayısı (newline karakteri sayısı)
-w
Kelime sayısı (boşlukla ayrılmış token'lar)
-c
Byte sayısı
-m
Karakter sayısı (UTF-8'de çok-baytlı karakterleri doğru sayar)
-L
En uzun satırın uzunluğu
DOSYA ADI OLMADAN SAYI

wc -l dosya.txt çıktısı: 42 dosya.txt — hem sayıyı hem dosya adını verir. Sadece sayıyı almak için yönlendirme kullanın: wc -l < dosya.txt42

05 wc: çoklu dosya ve seçici sayım

Birden fazla dosya verilince wc her birinin sayısını ve toplamı verir. Pipeline'la filtrelenmiş sayım için de kullanılır.

bash
# Çoklu dosya — alt toplam da gösterir
wc -l /var/log/*.log
  1234 /var/log/syslog
   567 /var/log/kern.log
  1801 total

# Sadece toplam (find + xargs)
find . -name '*.py' | xargs wc -l | tail -1

# Projedeki toplam kod satırı (yorumlar dahil)
find src/ -name '*.go' | xargs wc -l 2>/dev/null | tail -1

# Pipe'ta eleman sayısı
ls /usr/bin | wc -l          # /usr/bin'de kaç dosya var?
grep 'ERROR' app.log | wc -l  # kaç ERROR satırı var?
ps aux | grep 'python' | wc -l  # kaç python süreci çalışıyor?

# Dosya boyutunu byte yerine insan-okunur göster
wc -c < dosya.txt | numfmt --to=iec   # 2.8K gibi

06 Pratik vakalar

tr ve wc'nin gerçek kullanım senaryoları.

bash — Windows dosyasını Unix'e çevir
# CRLF → LF (Windows satır sonu → Unix)
tr -d '\r' < windows.txt > unix.txt

# Veya sed ile (yerinde düzenleme)
sed -i 's/\r//' windows.txt
bash — Kelime sıklığı analizi
# Metni kelimelere böl: harf olmayan → satır sonu
# -c tamamlayıcı, -s sıkıştır: harfsiz → \n
tr -cs 'A-Za-z' '\n' < makale.txt \
  | tr 'A-Z' 'a-z' \
  | sort \
  | uniq -c \
  | sort -rn \
  | head -20
bash — Script kalitesi: boş satır oranı
# Toplam satır
total=$(wc -l < script.sh)

# Boş olmayan satır sayısı
nonblank=$(grep -c '.' script.sh)

echo "Toplam: $total | Dolu: $nonblank | Boş: $((total - nonblank))"
bash — JSON değerini temizle
# API'den dönen JSON'dan sadece sayısal değerleri çek
curl -s 'https://api.example.com/count' \
  | jq '.total' \
  | tr -d '"'         # tırnak işaretlerini sil

# Base64 decode + kontrol karakterleri temizle
echo "SGVsbG8=" | base64 -d | tr -cd '[:print:]'
bash — Proje büyüklüğü raporu
# Dil bazında satır sayısı (Go projesi)
for ext in go html css js yaml; do
  count=$(find . -name "*.$ext" | xargs wc -l 2>/dev/null | tail -1 | awk '{print $1}')
  printf "%-6s %s satır\n" ".$ext" "$count"
done

.go    12453 satır
.html   3210 satır
.css     987 satır
.js     2100 satır
.yaml    456 satır

Hatırlanacaklar

  • tr sadece stdin okur — tr 'a-z' 'A-Z' < dosya.txt
  • tr -d '\r': Windows satır sonlarını temizle (CRLF → LF)
  • tr -cs 'A-Za-z' '\n': metni kelimelere böl (kelime sıklığı için)
  • tr -s ' ': ardışık boşlukları tek boşluğa sıkıştır
  • wc -l < dosya: sadece sayı (dosya adı olmadan)
  • grep -c '.' dosya: boş olmayan satır sayısı (wc -l'den farklı)
  • POSIX sınıfları ([:alpha:]) locale'e duyarlı — taşınabilir betiklerde tercih et

Devam: cut, paste, column — alan seçimi · sort, uniq — sıralama ve tekilleştirme · grep, sed, awk — metin işleme üçlüsü