Linux ve Unix sistemlerinde metin akışlarını komut satırından hızlıca dönüştürmek, değiştirmek veya filtrelemek istediğimizde Linux sed komutu devreye girer. Açılımı Stream Editor (Akış Düzenleyici) olan sed, dosyaları interaktif bir metin düzenleyicide (Vim, Nano vb.) açmaya gerek kalmadan, doğrudan akış (pipeline) üzerinden veya doğrudan dosya üzerinde düzenleme yapmanızı sağlar.
Bu rehberde, günlük operasyonlarda ve bash betiklerinde (scripting) en sık kullanılan sed komutlarını pratik örneklerle ele alacağız.
sed Komutunun Temel Çalışma Mantığı
sed, girdi olarak verilen metni satır satır okur, belirtilen kuralı uygular ve sonucu standart çıktıya (stdout) yansıtır. Temel sözdizimi şu şekildedir:
sed [seçenekler] 'komut' dosya_adi
Eğer herhangi bir seçenek belirtmezseniz orijinal dosya değişmez; sadece ekrana işlenmiş sonuç yazdırılır.
Metin Arama ve Değiştirme (substitute – s)
En popüler sed işlemi s (substitute) komutudur. Temel kalıbı s/eski/yeni/bayraklar şeklindedir:
1. Satırdaki İlk Eşleşmeyi Değiştirmek
Aşağıdaki komut her satırdaki yalnızca ilk “port: 80” ifadesini “port: 8080” ile değiştirir:
sed 's/port: 80/port: 8080/' config.yaml
2. Satırdaki Tüm Eşleşmeleri Değiştirmek (Global Değiştirme – g)
Bir satırda birden fazla geçen kelimenin hepsini değiştirmek için komutun sonuna g (global) bayrağı eklenir:
sed 's/localhost/127.0.0.1/g' hosts.txt
3. Büyük/Küçük Harf Duyarsız Değiştirme (Case-Insensitive – I)
Aramanın büyük/küçük harf farkına takılmaması için I bayrağını kullanabilirsiniz:
sed 's/error/WARNING/gI' app.log
Dosyada Kalıcı Değişiklik Yapmak (-i Parametresi)
Varsayılan olarak sed orijinal dosyaya dokunmaz. Değişiklikleri dosyanın kendisine yazmak için -i (in-place) parametresi kullanılır:
sed -i 's/DEBUG=true/DEBUG=false/g' .env
Önemli İpucu (Yedek Alarak Değiştirme): Kalıcı değişiklik yaparken dosyanın orijinal halini
.bakuzantısıyla yedeklemek için uzantı belirtebilirsiniz:
“bash<br>sed -i.bak 's/DEBUG=true/DEBUG=false/g' .env<br>`<br>Bu işlem hem.envdosyasını günceller hem de.env.bak` adında bir emniyet kopyası bırakır.
Satır Silme İşlemleri (delete – d)
sed ile belirli kriterlere uyan satırları çıktınızdan veya dosyanızdan silebilirsiniz:
# 1. Belirli bir satır numarasını silmek (örn: 5. satır)
sed '5d' dosya.txt
# 2. Belirli bir satır aralığını silmek (örn: 10 ile 20 arasındaki satırlar)
sed '10,20d' dosya.txt
# 3. Belirli bir kelimeyi içeren satırları silmek
sed '/DEPRECATED/d' build.log
# 4. Dosyadaki tüm boş satırları temizlemek
sed '/^$/d' liste.txt
Belirli Satırlara Yeni Metin Eklemek (i ve a)
i(insert): Belirtilen satırın önüne metin ekler.a(append): Belirtilen satırın sonrasına metin ekler.
# 1. satırın hemen öncesine başlık eklemek
sed -i '1i # Bu dosya otomasyon tarafindan uretilmistir' config.conf
# "server_name" geçen satırın hemen altına yeni satır eklemek
sed -i '/server_name/a \ listen 443 ssl;' nginx.conf
Regex (Düzenli İfadeler) ile İleri Düzey Kullanım
Genişletilmiş düzenli ifadeleri (ERE) kullanmak için -E parametresi tavsiye edilir. Örneğin, satır başındaki tüm boşluk ve sekme (tab) karakterlerini temizlemek için:
sed -E 's/^[ \t]+//' kod.c
HTML veya XML etiketlerini metinden ayıklamak için:
sed -E 's/<[^>]+>//g' sayfa.html
Diğer Terminal Araçları ile Entegrasyon
sed, Unix felsefesinin en büyük gücü olan pipe (|) zincirlerinde mükemmel çalışır. Örneğin, daha önce incelediğimiz find komutu ile bulunan tüm dosyalarda toplu metin değişimi yapabilir veya grep ile Arama Yapmak çıktısını filtreleyebilirsiniz:
# Bulunan tüm .conf dosyalarında IP adresini topluca güncellemek:
find /etc/nginx -name "*.conf" -exec sed -i 's/10.0.0.1/10.0.0.2/g' {} +
Daha ayrıntılı regex kuralları ve POSIX standartları için resmi GNU sed El Kitabı dokümantasyonuna başvurabilirsiniz.