Özet
sed [-EHalnru] komut [-I uzantı] [-i uzantı] [dosya ...]
sed [-EHalnru] [-e komut] [-f komut_dosyası] [-I uzantı] [-i uzantı] [dosya ...]
Açıklama
sed yardımcı programı, belirtilen dosyaları veya dosya belirtilmemişse standart girdiyi okur ve girdiyi bir komut listesi tarafından belirtildiği şekilde değiştirir. Değiştirilen girdi daha sonra standart çıktıya yazılır.
sed için ilk argüman olarak tek bir komut belirtilebilir. Birden fazla komut, -e veya -f seçenekleri kullanılarak belirtilebilir. Tüm komutlar, kökenlerinden bağımsız olarak belirtildikleri sırayla girdiye uygulanır.
Seçenekler
-E: Düzenli ifadeleri temel düzenli ifadeler (BRE) yerine genişletilmiş düzenli ifadeler olarak yorumlar. Her iki biçim içinre_format(7)sayfasına bakın.-a: Varsayılan olarak,wfonksiyonları için parametre olarak listelenen dosyalar herhangi bir işlem başlamadan önce oluşturulur veya kesilir.-a,sedaracının ilgiliwfonksiyonunu içeren komut bir girdi satırına uygulanana kadar her dosyayı açmayı geciktirmesini sağlar.-e komut:komutargümanı ile belirtilen düzenleme komutlarını komut listesine ekler.-f komut_dosyası:komut_dosyasıdosyasında bulunan düzenleme komutlarını komut listesine ekler. Her düzenleme komutu ayrı bir satırda yer almalıdır.komut_dosyasıdeğeri-ise komutlar standart girdiden okunur.-H: Düzenli ifade söz dizimindeki gelişmiş özellikleri etkinleştirir. Bu seçeneğin-Eseçeneğinden bağımsız olduğunu unutmayın. Ayrıntılar içinre_format(7)sayfasına bakın.-I uzantı: Dosyaları yerinde (in-place) düzenler ve belirtilen uzantıyla yedeklerini kaydeder. Sıfır uzunlukta uzantı verilirse yedek kaydedilmez. Disk alanının tükenmesi gibi durumlarda bozulma veya kısmi içerik riski taşıdığı için, dosyaları yerinde düzenlerken sıfır uzunlukta uzantı verilmesi önerilmez.
-I ile yerinde düzenleme, her dosya tek bir çıktı akışı oluşturmak yerine kendi bireyselliğini korusa da tüm dosyaları kapsayan tek bir sürekli satır adresi alanında gerçekleşir. Satır sayacı dosyalar arasında sıfırlanmaz, adres aralıkları dosya sınırlarını aşabilir ve $ adresi yalnızca son dosyanın son satırıyla eşleşir. Birçok yerinde düzenleme kullanımında bu beklenmedik sonuçlara yol açabilir; bu durumlarda -i kullanılması istenir.
-i uzantı: Dosyaları-Iseçeneğine benzer şekilde yerinde düzenler, ancak her dosyayı diğerlerinden bağımsız olarak ele alır. Her dosyadaki satır numaraları1'den başlar,$adresi mevcut dosyanın son satırıyla eşleşir ve adres aralıkları mevcut dosyayla sınırlıdır. Sonuç, her dosya ayrı birsedörneği tarafından düzenlenmiş gibidir.-l: Çıktıyı satır arabellekli (line buffered) yapar.-n: Varsayılan olarak, tüm komutlar uygulandıktan sonra her girdi satırı standart çıktıya yankılanır.-nbu davranışı bastırır.-r: GNUsedile uyumluluk için-Eile aynıdır.-u: Çıktıyı arabelleksiz (unbuffered) yapar.
Komut Biçimi
Bir sed komutunun biçimi şöyledir:
[adres[,adres]]fonksiyon[argümanlar]
Komutun ilk adresinden ve fonksiyon bölümünden önce boşluk eklenebilir.
Normalde sed, bir girdi satırını sonundaki satır sonu karakteri hariç olacak şekilde döngüsel olarak kalıp alanına (pattern space) kopyalar. D fonksiyonundan sonra kalan içerik varsa bu davranış değişebilir. Ardından bu kalıp alanını seçen adreslere sahip tüm komutları uygular, kalıp alanını satır sonu ekleyerek standart çıktıya kopyalar ve kalıp alanını siler.
Bazı fonksiyonlar, sonraki işlemler için kalıp alanının tamamını veya bir kısmını saklamak amacıyla tutma alanı (hold space) kullanır.
Sed Adresleri
Adres gerekli değildir. Belirtilirse aşağıdaki biçimlerden birine sahip olmalıdır:
Girdi dosyaları boyunca birikimli olarak girdi satırlarını sayan bir sayı.
-iseçeneği yürürlükteyse satırlar her dosyada bağımsız olarak sayılır.Girdinin son satırını adresleyen dolar (
$) karakteri.-iseçeneği belirtilmişse mevcut dosyanın son satırını adresler.Önünde ve arkasında sınırlayıcı bulunan bir düzenli ifadeden oluşan bağlam adresi. Kapanış sınırlayıcısından sonra, düzenli ifadenin büyük/küçük harfe duyarsız eşleştirileceğini belirtmek için isteğe bağlı olarak
Ikarakteri gelebilir.
Adresi olmayan komut satırı her kalıp alanını seçer.
Tek adresi olan komut satırı, adresle eşleşen tüm kalıp alanlarını seçer.
İki adresi olan komut satırı kapsayıcı bir aralık seçer. Bu aralık, ilk adresle eşleşen ilk kalıp alanı ile başlar. Aralığın sonu, ikinci adresle eşleşen bir sonraki kalıp alanıdır. İkinci adres, ilk seçilen satır numarasından küçük veya ona eşit bir sayıysa yalnızca o satır seçilir.
İkinci adresteki sayının önüne, ilk kalıptan sonra eşleşecek satır sayısını belirtmek için + eklenebilir. İkinci adres bir bağlam adresiyse sed, ikinci adresi ilk adresle eşleşen kalıp alanıyla yeniden eşleştirmez. Seçilen aralığı izleyen ilk satırdan başlayarak sed, ilk adresi tekrar aramaya başlar.
Düzenleme komutları, ünlem (!) fonksiyonu kullanılarak seçilmeyen kalıp alanlarına uygulanabilir.
Sed Düzenli İfadeleri
sed içinde kullanılan düzenli ifadeler varsayılan olarak temel düzenli ifadelerdir (BRE). -E bayrağı verilirse bunun yerine genişletilmiş düzenli ifadeler kullanılır. Daha fazla bilgi için re_format(7) sayfasına bakın.
sed, düzenli ifadelere şu eklemeleri yapar:
Bir bağlam adresinde, düzenli ifadeyi sınırlamak için ters eğik çizgi (
\) veya satır sonu karakteri dışındaki herhangi bir karakter kullanılabilir. Sınırlayıcı eğik çizgi (/) değilse açılış sınırlayıcısının önüne ters eğik çizgi getirilmelidir. Örneğin\xabcxbağlam adresi/abc/adresine eşdeğerdir. Düzenli ifade içinde sınırlayıcı karakterden önce ters eğik çizgi kullanılması, o karakterin harfi harfine ele alınmasına neden olur.\nkaçış dizisi, kalıp alanına gömülü satır sonu karakteriyle eşleşir. Ancak bir adreste veya değiştirme komutunda harfi harfine satır sonu karakteri kullanılamaz.
sed düzenli ifadelerinin özel bir özelliği, varsayılan olarak kullanılan son düzenli ifadeye dönebilmeleridir. Düzenli ifade boşsa, yani yalnızca sınırlayıcı karakterler belirtilmişse, bunun yerine karşılaşılan son düzenli ifade kullanılır. Son düzenli ifade, derleme zamanında değil çalışma zamanında kullanılan son düzenli ifade olarak tanımlanır. Örneğin /abc/s//XXX/ komutu, abc kalıbı yerine XXX değerini koyar.
Sed Fonksiyonları
Aşağıdaki komut listesinde, her komut için izin verilen maksimum adres sayısı [0addr], [1addr] veya [2addr] ile belirtilmiştir.
metin argümanı bir veya daha fazla satırdan oluşur. Metne satır sonu gömmek için önüne ters eğik çizgi getirin. Metindeki diğer ters eğik çizgiler silinir ve izleyen karakter harfi harfine alınır.
r ve w fonksiyonları, fonksiyon harfinden boşlukla ayrılması gereken isteğe bağlı bir dosya parametresi alır. sed aracına argüman olarak verilen her dosya, girdi işleme başlamadan önce oluşturulur veya içeriği kesilir.
b, r, s, t, w, y, ! ve : fonksiyonlarının tümü ek argümanlar kabul eder. Aşağıdaki özetler, hangi argümanların fonksiyon harflerinden boşluk karakterleriyle ayrılması gerektiğini gösterir.
Fonksiyonlardan ikisi fonksiyon listesi alır. Fonksiyon listesi, satır sonlarıyla ayrılmış sed fonksiyonlarından oluşur:
{ fonksiyon
fonksiyon
...
fonksiyon
}
{ işaretinden önce boşluk gelebilir ve sonrasında boşluk bulunabilir. fonksiyon öncesinde boşluk gelebilir. Sonlandırıcı } işaretinden önce satır sonu gelmelidir ve bundan önce de boşluk bulunabilir.
[2addr]{ fonksiyon-listesi }:fonksiyon-listesiöğesini yalnızca kalıp alanı seçildiğinde yürütür.[1addr]a\ metin: Bir girdi satırını okumaya yönelik her girişimden hemen öncemetiniçeriğini standart çıktıya yazar.[2addr]b[etiket]: Belirtilen etikete sahip:fonksiyonuna dallanır. Etiket belirtilmezse betiğin sonuna dallanır.[2addr]c\ metin: Kalıp alanını siler ve sonraki döngüyü başlatır. 0 veya 1 adresle ya da 2 adresli bir aralığın sonundametinstandart çıktıya yazılır.[2addr]d: Kalıp alanını siler ve sonraki döngüyü başlatır.[2addr]D: Kalıp alanının ilk satır sonu karakterine kadar olan ilk bölümünü siler ve sonraki döngüyü başlatır.[2addr]g: Kalıp alanının içeriğini tutma alanının içeriğiyle değiştirir.[2addr]G: Kalıp alanına satır sonu karakteri ve ardından tutma alanının içeriğini ekler.[2addr]h: Tutma alanının içeriğini kalıp alanının içeriğiyle değiştirir.[2addr]H: Tutma alanına satır sonu karakteri ve ardından kalıp alanının içeriğini ekler.[1addr]i\ metin:metiniçeriğini standart çıktıya yazar.[2addr]l: KüçükLharfi. Kalıp alanını görsel olarak açık bir biçimde standart çıktıya yazar.
l fonksiyonunun kullandığı gösterim:
- Ters eğik çizgi:
\\ - Uyarı (
alert):\a - Sayfa besleme:
\f - Satır başı (
carriage return):\r - Sekme (
tab):\t - Dikey sekme:
\v
Yazdırılamayan karakterler, karakterdeki her bayt için üç haneli sekizlik sayılar olarak, önünde ters eğik çizgiyle yazılır. Uzun satırlar katlanır ve katlama noktası ters eğik çizgi ile ardından gelen satır sonu gösterilerek belirtilir. Her satırın sonu $ ile işaretlenir.
[2addr]n: Varsayılan çıktı bastırılmamışsa kalıp alanını standart çıktıya yazar ve kalıp alanını bir sonraki girdi satırıyla değiştirir.[2addr]N: Bir sonraki girdi satırını kalıp alanına ekler. Eklenen malzemeyi özgün içerikten ayırmak için gömülü satır sonu karakteri kullanılır. Mevcut satır numarasının değiştiğini unutmayın.[2addr]p: Kalıp alanını standart çıktıya yazar.[2addr]P: Kalıp alanını ilk satır sonu karakterine kadar standart çıktıya yazar.[1addr]q: Betiğin sonuna dallanır ve yeni bir döngü başlatmadan çıkar.[1addr]r dosya: Bir girdi satırını okumaya yönelik bir sonraki girişimden hemen öncedosyaiçeriğini standart çıktıya kopyalar.dosyaherhangi bir nedenle okunamazsa sessizce yoksayılır ve hata durumu ayarlanmaz.[2addr]s/düzenli ifade/değiştirme/bayraklar: Kalıp alanındaki düzenli ifadenin ilk örneğini değiştirme dizesiyle değiştirir. Düzenli ifadeyi ve değiştirmeyi sınırlamak için eğik çizgi yerine ters eğik çizgi veya satır sonu dışındaki herhangi bir karakter kullanılabilir.
Değiştirmede görünen ampersan (&), düzenli ifadeyle eşleşen dizeyle değiştirilir. Bu özel anlam, önüne ters eğik çizgi getirilerek bastırılabilir. # bir rakam olmak üzere \# dizesi, karşılık gelen geriye doğru referans ifadesi tarafından eşleştirilen metinle değiştirilir; re_format(7) sayfasına bakın.
Bir satır, içine satır sonu karakteri koyularak bölünebilir. Değiştirme dizesinde satır sonu karakteri belirtmek için önüne ters eğik çizgi getirin.
Değiştirme Bayrakları
s fonksiyonundaki bayraklar aşağıdakilerden sıfır veya daha fazlasıdır:
N: Değişikliği yalnızca kalıp alanındaki düzenli ifadeninN. oluşumu için yapar.g: Değişikliği yalnızca ilk eşleşme için değil, düzenli ifadenin çakışmayan tüm eşleşmeleri için yapar.p: Değişiklik yapıldıysa kalıp alanını standart çıktıya yazar. Değiştirme dizesi değiştirdiği dizeyle özdeş olsa bile değişiklik yapılmış sayılır.w dosya: Değişiklik yapıldıysa kalıp alanınıdosyadosyasına ekler. Değiştirme dizesi değiştirdiği dizeyle özdeş olsa bile değişiklik yapılmış sayılır.i,I: Düzenli ifadeyi büyük/küçük harfe duyarsız şekilde eşleştirir.
Diğer Fonksiyonlar
[2addr]t [etiket]: Girdi satırının en son okunmasından veyatfonksiyonunun yürütülmesinden bu yana herhangi bir değişiklik yapıldıysa, etikete sahip:fonksiyonuna dallanır. Etiket belirtilmezse betiğin sonuna dallanır.[2addr]w dosya: Kalıp alanınıdosyadosyasına ekler.[2addr]x: Kalıp ve tutma alanlarının içeriklerini takas eder.[2addr]y/dize1/dize2/: Kalıp alanındakidize1içindeki karakterlerin tüm oluşumlarınıdize2içindeki karşılık gelen karakterlerle değiştirir. Dizeleri sınırlamak için eğik çizgi yerine ters eğik çizgi veya satır sonu dışındaki herhangi bir karakter kullanılabilir.dize1vedize2içinde, satır sonu dışındaki herhangi bir karakterin önündeki ters eğik çizgi o karakteri harfi harfine temsil eder. Ters eğik çizgiyi izleyenn, satır sonu karakteriyle değiştirilir.[2addr]!fonksiyon: Fonksiyonu yalnızca adresler tarafından seçilmeyen satırlara uygular.[2addr]!fonksiyon-listesi: Fonksiyon listesini yalnızca adresler tarafından seçilmeyen satırlara uygular.[0addr]:etiket: Hiçbir şey yapmaz;bvetkomutlarının dallanabileceği etiketi taşır.[1addr]=: Satır numarasını ve ardından satır sonu karakterini standart çıktıya yazar.[0addr]: Boş satırlar yoksayılır.[0addr]#:#ve satırın geri kalanı yoksayılır, yani yorum olarak kabul edilir. Tek istisna, dosyadaki ilk iki karakter#nise varsayılan çıktının bastırılmasıdır. Bu, komut satırında-nseçeneğinin belirtilmesiyle aynıdır.
Ortam Değişkenleri
COLUMNS, LANG, LC_ALL, LC_CTYPE ve LC_COLLATE ortam değişkenleri, environ(7) sayfasında açıklandığı gibi sed aracının yürütülmesini etkiler.
Çıkış Durumu
sed yardımcı programı başarı durumunda 0, hata oluşursa >0 değeriyle çıkar.
Örnekler
Başka bir komuttan yönlendirildiğinde bar ifadesini baz ile değiştirin:
echo "An alternate word, like bar, is sometimes used in examples." | sed 's/bar/baz/'
Ters eğik çizgi kullanmak bazen okumayı ve takip etmeyi zorlaştırabilir:
echo "/home/example" | sed 's/\/home\/example/\/usr\/local\/example/'
Yollarla çalışırken farklı bir ayırıcı kullanmak kullanışlı olabilir:
echo "/home/example" | sed 's#/home/example#/usr/local/example#'
test.txt dosyasındaki tüm foo oluşumlarını, dosyanın yedeğini almadan bar ile değiştirin:
sed -i '' -e 's/foo/bar/g' test.txt
Ayrıca Bakınız
awk(1), ed(1), grep(1), regex(3), re_format(7)
Lee E. McMahon, SED - A Non-interactive Text Editor, AT&T Bell Laboratories, Computing Science Technical Report, 77, Ocak 1979.
Standartlar
sed yardımcı programının IEEE Std 1003.2 (POSIX.2) özelliklerinin bir üst kümesi olması beklenmektedir.
-E, -I, -a ve -i seçenekleri; -f - ifadesinin özel anlamı; adres aralığının ikinci üyesindeki önek +; adres düzenli ifadesi ve değiştirme komutuna yönelik I bayrağı standart dışı FreeBSD uzantılarıdır ve diğer işletim sistemlerinde bulunmayabilir.
Tarihçe
L. E. McMahon tarafından yazılan bir sed komutu, Sürüm 7 AT&T UNIX'te ortaya çıkmıştır.
Yazarlar
Diomidis D. Spinellis <dds@FreeBSD.org>
Hatalar
0x5C (ASCII \) değerine sahip bir bayt içeren çok baytlı karakterler, a, c ve i komutlarına verilen argümanlarda satır devam ettirme karakterleri olarak yanlış ele alınabilir. Çok baytlı karakterler, s ve y komutlarında sınırlayıcı olarak kullanılamaz.