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 '}'