1. #!trpst#trp-gettext data-...
  2. #!trpst#trp-gettext data-...
  3. Linux
  4. Terminal
  5. sed: Akış Düzenleyici ile Metin Değiştirme ve Düzenleme

sed: Akış Düzenleyici ile Metin Değiştirme ve Düzenleme

Print

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 .bak uzantı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 .env dosyası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.

Tags , , , , ,

How can we help?