Sed kullanımı örnekleri

· by Gürkan · Read in about 3 min · (630 Words)

Sed (veya GNU versiyonu olan gsed) , oldukça yetenekli bir yazı düzenleme editörüdür. Tek komutla sizi büyük bir iş yükünden kurtarabilir, işte bazı kullanım örnekleri:

BOŞLUK KOYMA

İçinde "deneme" geçen satırların üzerinde bir boş satır oluştur:

sed '/deneme/{x;p;x;}'

İçinde "deneme" geçen satırların altında bir boş satır oluştur:

sed '/deneme/G'

İçinde "deneme" geçen satırların hem üzerinde hem altında bir boş satır oluştur:

sed '/deneme/{x;p;x;G;}'

Her 5 satırdan sonra bir boş satır ekle:

gsed '0~5G' (GNU sed)

sed 'n;n;n;n;G;' (Diğer sed sürümleri)

NUMARALANDIRMA

Her satırın başına satır numarası yaz, araya bir "tab" boşluk koy:

sed = dosya_adı | sed 'N;s/\n/\t/'

Her satırın başına satır numarası yaz ancak eğer satır boşsa numara görünmesin:

sed '/./=' dosya_adı | sed '/./N; s/\n/ /'

Satır sayısını yazdır

sed -n '$='

YAZI DÖNÜŞTÜRME

UNIX altında Windows satır sonlarını (CR/LF) Unix formatına dönüştür:

sed 's/.$//'

Windows/Dos altında Unix satır sonlarını Windows formatına dönüştür:

sed "s/$//"

her satırın önündeki boş alanı (boşluk, tab) kaldır:

sed 's/^[ \t]*//'

Her satırın sonundaki boş alanı (boşluk, tab) kaldır:

sed 's/[ \t]*$//'

Her satırın başına 5 boşluk karakteri koy:

sed 's/^/ /'

Yazıyı 79-sütunluk genişliğin ortasına taşı (yöntem 1'de satır başındaki boşluklar önemsizdir, yöntem 2'de onlar da taşınır):

sed -e :a -e 's/^.\\{1,77\\}$/ & /;ta' (yöntem 1)

sed -e :a -e 's/^.\\{1,77\\}$/ &/;ta' -e 's/\\( *\\)\1/\1/' (yöntem 2)

Yazıdaki "foo"ları bul ve "bar" olarak değiştir:

sed 's/foo/bar/' (satırdaki ilk "foo"yu değiştirir)

sed 's/foo/bar/4' (satırdaki 4. foo'yu değiştirir)

sed 's/foo/bar/g' (satırdaki tüm foo'ları değiştirir)

sed '/baz/s/foo/bar/g' (yalnızca "baz" kelimesini bulduğu satırlarda "foo"ları "bar" olarak değiştirir)

sed '/baz/!s/foo/bar/g' (satırda "baz" kelimesi varsa işlem yapmaz, yoksa "foo"ları "bar" olarak değiştirir)

Satırları başaşağı et; ilk satır sona, son satır başa:

sed '1!G;h;$!d' (yöntem 1)

sed -n '1!G;h;$p' (yöntem 2)

Her satırı ters çevir (ahmet > temha):

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

Eğer bir satır "\" ile biterse, altındaki satırı ona ekle:

sed -e :a -e '/\\$/N; s/\\\n//; ta'

Eğer bir satır "=" ile başlıyorsa, onu önceki satırın sonuna ekle, "=" işaretini de boşluk ile değiştir

sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

KIRPMA

Dosyanın ilk 10 satırını yazdır:

sed 10q

Dosyanın son 10 satırını yazdır:

sed -e :a -e '$q;N;11,$D;ba'

Sadece içinde "deneme" bulunan satırları yazdır:

sed -n '/deneme/p' (yöntem 1)

sed '/deneme/!d' (yöntem 2)

Sadece içinde "deneme" bulunmayan satırları yazdır:

sed -n '/deneme/!p' (yöntem 1)

sed '/deneme/d' (yöntem 2)

Sadece içinde "deneme" bulunan satırın bir üstündeki satırı yazdır:

sed -n '/deneme/{g;1!p;};h'

Sadece içinde "deneme" bulunan satırın bir altındaki satırı yazdır:

sed -n '/regexp/{n;p;}'

İçinde AAA, BBB ve CCC olan satırları yazdır (sıra gözetme):

sed '/AAA/!d; /BBB/!d; /CCC/!d'

İçinde sırasıyla AAA, BBB ve CCC olan satırları yazdır:

sed '/AAA.*BBB.*CCC/!d'

İçinde AAA veya BBB veya CCC bulunan satırları yazdır:

sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d (Diğer sed'ler)

gsed '/AAA\|BBB\|CCC/!d' (GNU sed)

AAA içeren paragrafları yazdır (paragraf=boş satırlar arası):

sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

İçinde AAA veya BBB veya CCC bulunan paragrafları yazdır

sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d' (GNU sed)

65 karakter veya daha uzun olan satırları yazdır:

sed -n '/^.\{65\}/p'

65 karakterden daha kısa olan satırları yazdır:

sed -n '/^.\{65\}/!p' (yöntem 1)

sed '/^.\{65\}/d' (yöntem 2)

SİLME

Iowa ve Montana değerleri arasındakileri sil:

sed '/Iowa/,/Montana/d'

Birbirinin aynısı olan satırları sil (sadece ilk örnekleri kalır):

sed '$!N; /^\(.*\)\n\1$/!P; D'

Sadece birbirinin aynısı olan satırlar kalsın:

sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'

Yazının ilk 10 satırını sil:

sed '1,10d'

yazının son satırını sil:

sed '$d'

Yazının son 10 satırını siler:

sed -e :a -e '$d;N;2,10ba' -e 'P;D' (yöntem 1)

sed -n -e :a -e '1,10!{P;N;D;};N;ba' (yöntem 2)

Her 8. satırda bir sil:

gsed '0~8d' (GNU sed)

sed 'n;n;n;n;n;n;n;d;' (Diğer sed'ler)

Yazıdaki tüm boş satırları sil:

sed '/^$/d' (yöntem 1)

sed '/./!d' (yöntem 2)

Yazının başındaki boş satırları sil:

sed '/./,$!d'

Yazının sonundaki boş satırları sil:

sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'