Özet
ed [-] [-s] [-p string] [file]
red [-] [-s] [-p string] [file]
Açıklama
ed, satır tabanlı bir metin düzenleyicidir. Metin dosyalarını oluşturmak, görüntülemek, değiştirmek ve başka şekillerde işlemek için kullanılır.
red olarak çağrıldığında düzenleyici kısıtlı (restricted) modda çalışır. Bu moddaki tek fark, düzenleyicinin ! ile başlayan, yani ed tarafından kabuk komutu olarak yorumlanan, veya / içeren dosya adlarının kullanımını kısıtlamasıdır.
Mevcut dizinin dışında düzenleme yapmak, yalnızca kullanıcının mevcut dizine yazma izni olmaması durumunda yasaklanır. Kullanıcının mevcut dizine yazma izni varsa, mevcut dizinde sembolik bağlar oluşturulabilir; bu durumda red, kullanıcının sembolik bağın işaret ettiği dosyayı düzenlemesini engellemez.
Bir dosya bağımsız değişkeniyle çağrılırsa, dosyanın bir kopyası düzenleyicinin arabelleğine okunur. Değişiklikler doğrudan dosyanın kendisine değil, bu kopya üzerinde yapılır. ed komutundan çıkıldığında, w komutuyla açıkça kaydedilmeyen tüm değişiklikler kaybolur.
Düzenleme Modları
Düzenleme iki farklı modda gerçekleştirilir: komut modu ve giriş modu. İlk çağrıldığında ed komut modundadır. Bu modda komutlar standart girdiden okunur ve düzenleyici arabelleğinin içeriğini işlemek üzere yürütülür.
Tipik bir komut şu şekilde görünebilir:
,s/old/new/g
Bu komut, old karakter dizisinin tüm geçtiği yerleri new ile değiştirir.
a (append), i (insert) veya c (change) gibi bir giriş komutu verildiğinde ed giriş moduna geçer. Bu mod, dosyaya metin eklemenin birincil yoludur.
Giriş modunda komut kullanılamaz; standart girdi doğrudan düzenleyici arabelleğine yazılır. Satırlar, yeni satır karakteri dahil olmak üzere metinden oluşur. Giriş modu, bir satıra tek nokta (.) girilerek sonlandırılır.
Tüm ed komutları satırların tamamı veya satır aralıkları üzerinde çalışır. Örneğin d satırları siler, m satırları taşır. Bir satırın yalnızca bir kısmını değiştirme işlemi değiştirme komutuyla yapılabilir; ancak s komutu bile tek seferde satırların tamamına uygulanır.
Genel olarak ed komutları, sıfır veya daha fazla satır adresini takip eden tek karakterli bir komuttan ve olası ek parametrelerden oluşur:
[address[,address]]command[parameters]
Adresler, komuttan etkilenecek satırı veya satır aralığını belirtir. Komutun kabul ettiğinden daha az adres verilirse varsayılan adresler kullanılır.
Seçenekler
-s: Teşhis iletilerini bastırır.edstandart girdiyi bir betikten okuyorsa bu seçenek kullanılmalıdır.-p string: Komut istemi belirtir. Bu istem,Pkomutuyla açılıp kapatılabilir.file: Okunacak dosyanın adını belirtir. Dosya adının önüne ünlem (!) getirilirse bu bir kabuk komutu olarak yorumlanır; okunan veri,sh(1)aracılığıyla yürütülen komutun standart çıktısıdır. Adı ünlem işaretiyle başlayan bir dosyayı okumak için adın önüne ters bölü (\) getirin. Varsayılan dosya adı, yalnızca ünlem işaretiyle başlamıyorsa dosya olarak ayarlanır.
Satır Adresleme
Adres, arabellekteki bir satırın numarasını temsil eder. ed, hiçbir adres belirtilmediğinde komutlara genellikle varsayılan adres olarak sağlanan bir geçerli adresi korur.
Bir dosya ilk okunduğunda geçerli adres dosyanın son satırına ayarlanır. Genel olarak geçerli adres, bir komuttan etkilenen en son satıra ayarlanır.
Bir satır adresi, aşağıdaki tabanlardan biriyle oluşturulur ve isteğe bağlı olarak sayısal sapma (offset) takip edebilir. Sapma; basamakların, işleçlerin (+, - ve ^) ve boşlukların herhangi bir kombinasyonunu içerebilir. Adresler soldan sağa okunur ve değerleri geçerli adrese göre hesaplanır.
Adreslerin satır numaralarını temsil ettiği kuralının tek istisnası 0 adresidir. Bu adres "ilk satırdan önce" anlamına gelir ve mantıklı olduğu her yerde geçerlidir.
Adres aralığı, virgül veya noktalı virgülle ayrılmış iki adrestir. Bir aralıktaki ilk adresin değeri ikincisinin değerini aşamaz. Bir aralıkta yalnızca tek adres verilirse ikinci adres verilen adrese ayarlanır.
n > 2 olmak üzere bir n'li adres grubu verilirse, karşılık gelen aralık grubun son iki adresiyle belirlenir. Yalnızca tek adres bekleniyorsa son adres kullanılır.
Virgülle ayrılmış aralıktaki her adres geçerli adrese göre yorumlanır. Noktalı virgülle ayrılmış aralıkta ise ilk adres geçerli adresi ayarlamak için kullanılır ve ikinci adres birincisine göre yorumlanır.
Adres Sembolleri
.: Arabellekteki geçerli satır.$: Arabellekteki son satır.n: Arabellektekin. satır.n,[0,$]aralığında bir sayıdır.-veya^: Önceki satır.-1ile eşdeğerdir ve birikimli etkiyle tekrarlanabilir.-nveya^n:nnegatif olmayan bir sayı olmak üzeren. önceki satır.+: Sonraki satır.+1ile eşdeğerdir ve birikimli etkiyle tekrarlanabilir.+n:nnegatif olmayan bir sayı olmak üzeren. sonraki satır.,veya%: Arabellekteki ilk satırdan son satıra kadar olan satırlar.1,$adres aralığıyla eşdeğerdir.;: Arabellekteki geçerli satırdan son satıra kadar olan satırlar..,$adres aralığıyla eşdeğerdir./re/:redüzenli ifadesini içeren bir sonraki satır. Arama gerekirse arabelleğin başına sarar ve geçerli satıra kadar aşağıya doğru devam eder.//son aramayı tekrarlar.?re?:redüzenli ifadesini içeren bir önceki satır. Arama gerekirse arabelleğin sonuna sarar ve geçerli satıra kadar yukarıya doğru devam eder.??son aramayı tekrarlar.'lc: Daha öncekkomutuyla işaretlenmiş satır.lc, küçük harfli bir karakterdir.
Düzenli İfadeler
Düzenli ifadeler, metin seçmede kullanılan şablonlardır. Örneğin şu komut, string ifadesini içeren tüm satırları yazdırır:
g/string/
Düzenli ifadeler, yeni metinle değiştirilecek eski metni seçmek için s komutu tarafından da kullanılır.
Karakter dizisi sabitlerini belirtmenin yanı sıra, düzenli ifadeler karakter dizisi sınıflarını da temsil edebilir. Bir düzenli ifadenin bir satırdaki birkaç karakter dizisiyle eşleşmesi mümkünse, en soldaki en uzun eşleşme seçilir.
Düzenli İfade Sembolleri
c:{,},(,),<ve>dahil olmak üzere aşağıda listelenmeyen herhangi birckarakteri kendisiyle eşleşir.\c:{,},(,),<ve>hariç, ters bölüyle kaçış yapılmış herhangi birckarakteri kendisiyle eşleşir..: Herhangi bir tek karakterle eşleşir.[char-class]:char-classiçindeki herhangi bir tek karakterle eşleşir.char-classiçinde]karakterine yer vermek için bu karakterin ilk karakter olması gerekir. Karakter aralığının uç karakterleri arasına-getirilerek aralık belirtilebilir; örneğina-zküçük harfleri belirtir.[^char-class]: Yeni satır hariç,char-classiçinde yer almayan herhangi bir tek karakterle eşleşir.char-classyukarıda tanımlandığı gibidir.^: Bir düzenli ifadenin ilk karakteriyse ifadeyi satırın başına çıpalar; aksi halde kendisiyle eşleşir.$: Bir düzenli ifadenin son karakteriyse ifadeyi satırın sonuna çıpalar; aksi halde kendisiyle eşleşir.\<: Hemen ardından gelen tek karakterlik düzenli ifadeyi veya alt ifadeyi kelimenin başına çıpalar. Bu özellik mevcut olmayabilir.\>: Hemen ardından gelen tek karakterlik düzenli ifadeyi veya alt ifadeyi kelimenin sonuna çıpalar. Bu özellik mevcut olmayabilir.\(re\): Birrealt ifadesini tanımlar. Alt ifadeler iç içe yerleştirilebilir. Daha sonra\nbiçimindeki geri referans,ndeğeri[1,9]aralığında olmak üzeren. alt ifade tarafından eşleşen metne genişletilir. Örneğin\(.*\)\1, birbirine bitişik aynı alt dizelerden oluşan herhangi bir karakter dizisiyle eşleşir. Alt ifadeler sol sınırlayıcılarına göre sıralanır.*: Hemen öncesindeki tek karakterlik düzenli ifade veya alt ifadeyle sıfır veya daha fazla kez eşleşir.*bir düzenli ifadenin veya alt ifadenin ilk karakteriyse kendisiyle eşleşir.*işleci bazen beklenmeyen sonuçlar verebilir; örneğinb*, boş eşleşme en soldaki tek eşleşme olduğundanabbbdizesinin başıyla eşleşir.\{n,m\},\{n,\}veya\{n\}: Hemen öncesindeki tek karakterlik düzenli ifade veya alt ifadeyle en azn, en fazlamkez eşleşir.mbelirtilmezse en aznkez eşleşir. Virgül de belirtilmezse tam olaraknkez eşleşir.
char-class içinde aşağıdaki literal ifadeler kullanılabilir:
[:alnum:] [:cntrl:] [:lower:] [:space:]
[:alpha:] [:digit:] [:print:] [:upper:]
[:blank:] [:graph:] [:punct:] [:xdigit:]
- karakteri char-class değerinin ilk veya son karakteri olarak görünürse kendisiyle eşleşir. char-class içindeki diğer tüm karakterler kendileriyle eşleşir.
char-class içinde [.col-elm.] veya [=col-elm=] biçimindeki şablonlar, geçerli yerel ayarlara göre yorumlanır; şu anda desteklenmemektedir. Bu yapıların açıklaması için regex(3) ve re_format(7) belgelerine bakın.
Belirli regex(3) uygulamasına bağlı olarak ek düzenli ifade işleçleri de tanımlanmış olabilir.
Komutlar
Tüm ed komutları tek karakterlidir, ancak bazıları ek parametreler gerektirir. Bir komutun parametreleri birkaç satıra yayılıyorsa, son satır hariç her satır ters bölü (\) ile sonlandırılmalıdır.
Genel olarak satır başına en fazla bir komuta izin verilir. Ancak çoğu komut, komuttan etkilenen son satırı yazdırmak için p (yazdır), l (listele) veya n (numaralandır) gibi bir yazdırma sonekini kabul eder.
Kesme, genellikle ^C, geçerli komutu iptal eder ve düzenleyiciyi komut moduna geri döndürür.
Aşağıdaki komutlar tanınır. Komutlar, hiçbir adres belirtilmediğinde sağlanan varsayılan adres veya adres aralığıyla birlikte gösterilmiştir.
(.)a: Adreslenen satırdan sonra arabelleğe metin ekler. Metin giriş modunda girilir. Geçerli adres girilen son satıra ayarlanır.(.,.)c: Arabellekteki satırları değiştirir. Adreslenen satırlar arabellekten silinir ve yerlerine metin eklenir. Metin giriş modunda girilir. Geçerli adres girilen son satıra ayarlanır.(.,.)d: Adreslenen satırları arabellekten siler. Silinen aralıktan sonra bir satır varsa geçerli adres bu satıra ayarlanır; aksi halde silinen aralıktan önceki satıra ayarlanır.e dosya:dosyadosyasını düzenler ve varsayılan dosya adını ayarlar.dosyabelirtilmezse varsayılan dosya adı kullanılır. Yeni dosya okunmadan önce arabellekteki tüm satırlar silinir. Geçerli adres okunan son satıra ayarlanır.e !komut:!komutkomutunun standart çıktısını düzenler. Varsayılan dosya adı değişmez. Komutun çıktısı okunmadan önce arabellekteki tüm satırlar silinir. Geçerli adres okunan son satıra ayarlanır.E dosya:dosyadosyasını koşulsuz olarak düzenler.ekomutuna benzer, ancak kaydedilmemiş değişiklikler uyarı yapılmadan atılır. Geçerli adres okunan son satıra ayarlanır.f dosya: Varsayılan dosya adınıdosyaolarak ayarlar.dosyabelirtilmezse, kaçış karakterlerinden arındırılmış varsayılan dosya adı yazdırılır.(1,$)g/re/komut-listesi:redüzenli ifadesiyle eşleşen adreslenmiş satırların her birinekomut-listesiuygular. Geçerli adres,komut-listesiyürütülmeden önce o anda eşleşen satıra ayarlanır.gkomutunun sonunda geçerli adres,komut-listesitarafından etkilenen son satıra ayarlanır.(1,$)G/re/:redüzenli ifadesiyle eşleşen adreslenmiş satırları etkileşimli olarak düzenler. Her eşleşen satır için satır yazdırılır, geçerli adres ayarlanır ve kullanıcıdankomut-listesigirmesi istenir.Gkomutunun sonunda geçerli adres, en sonkomut-listesitarafından etkilenen son satıra ayarlanır.H: Hata açıklamalarının yazdırılmasını açar veya kapatır. Varsayılan olarak açıklamalar yazdırılmaz. Hata ayıklamaya yardımcı olması içinedbetiklerinin bu komutla başlaması önerilir.h: Son hatanın açıklamasını yazdırır.(.)i: Arabellekteki geçerli satırdan önce metin araya ekler. Metin giriş modunda girilir. Geçerli adres girilen son satıra ayarlanır.(.,.+1)j: Adreslenen satırları birleştirir. Satırlar arabellekten silinir ve yerlerine birleşmiş metinlerini içeren tek satır yerleştirilir. Geçerli adres sonuçta oluşan satıra ayarlanır.(.)klc: Bir satırı küçük harflilcharfiyle işaretler. Satır daha sonra sonraki komutlarda'lcolarak adreslenebilir. İşaret, satır silinene veya başka şekilde değiştirilene kadar temizlenmez.(.,.)l: Adreslenen satırları net bir biçimde yazdırır. Tek satır birden fazla ekranı dolduruyorsa son satırda--More--istemi yazdırılır;ed, sonraki ekranı görüntülemeden önce RETURN tuşunu bekler. Geçerli adres yazdırılan son satıra ayarlanır.(.,.)m(.): Arabellekteki satırları taşır. Adreslenen satırlar,0adresi de olabilen sağ taraftaki hedef adresin sonrasına taşınır. Geçerli adres taşınan son satıra ayarlanır.(.,.)n: Adreslenen satırları satır numaralarıyla birlikte yazdırır. Geçerli adres yazdırılan son satıra ayarlanır.(.,.)p: Adreslenen satırları yazdırır. Geçerli adres yazdırılan son satıra ayarlanır.P: Komut istemini açar veya kapatır. Komut satırı seçeneği-p stringile istem belirtilmediği sürece komut istemi varsayılan olarak kapalıdır.q:edkomutundan çıkar.Q:edkomutundan koşulsuz olarak çıkar.qkomutuna benzer, ancak kaydedilmemiş değişiklikler uyarı yapılmadan atılır.($)r dosya:dosyadosyasını adreslenen satırdan sonrasına okur.dosyabelirtilmezse varsayılan dosya adı kullanılır. Komuttan önce varsayılan dosya adı yoksa varsayılan dosya adıdosyaolarak ayarlanır; aksi halde değişmez. Geçerli adres okunan son satıra ayarlanır.($)r !komut:!komutkomutunun standart çıktısını adreslenen satırdan sonrasına okur. Varsayılan dosya adı değişmez. Geçerli adres okunan son satıra ayarlanır.(.,.)s/re/replacement/: Adreslenen satırlardaredüzenli ifadesiyle eşleşen metnireplacementile değiştirir. Varsayılan olarak her satırdaki yalnızca ilk eşleşme değiştirilir. Adreslenen satırların hiçbirinde değiştirme yapılmaması hatadır. Geçerli adres etkilenen son satıra ayarlanır.(.,.)s/re/replacement/g: Adreslenen satırlarda her eşleşmeyi değiştirir.(.,.)s/re/replacement/n:npozitif bir sayı olmak üzere yalnızcan. eşleşmeyi değiştirir.(.,.)s: Son değiştirmeyi tekrarlar. Bu biçim, birnsayım soneki veyar,gvepkarakterlerinin herhangi bir kombinasyonunu kabul eder.nverilirse yalnızcan. eşleşme değiştirilir;rson değiştirme yerine son aramanın düzenli ifadesini kullanır;gson değiştirmenin global sonekini açar veya kapatır;pson değiştirmenin yazdırma sonekini açar veya kapatır. Geçerli adres etkilenen son satıra ayarlanır.(.,.)t(.): Adreslenen satırları kopyalar. Satırlar,0adresi de olabilen sağ taraftaki hedef adresin sonrasına kopyalanır. Geçerli adres kopyalanan son satıra ayarlanır.u: Son komutu geri alır ve geçerli adresi komuttan önceki durumuna geri getirir.g,G,vveVglobal komutları geri alma işlemi tarafından tek komut olarak kabul edilir.ukendi kendisinin tersidir.(1,$)v/re/komut-listesi:redüzenli ifadesiyle eşleşmeyen adreslenmiş satırların her birinekomut-listesiuygular.gkomutuna benzer.(1,$)V/re/:redüzenli ifadesiyle eşleşmeyen adreslenmiş satırları etkileşimli olarak düzenler.Gkomutuna benzer.(1,$)w dosya: Adreslenen satırlarıdosyadosyasına yazar. Dosyanın önceki tüm içeriği uyarı yapılmadan kaybolur. Varsayılan dosya adı yoksadosyavarsayılan dosya adı olarak ayarlanır; aksi halde değişmez. Dosya adı belirtilmezse varsayılan dosya adı kullanılır. Geçerli adres değişmez.(1,$)wq dosya: Adreslenen satırlarıdosyadosyasına yazar ve ardındanqkomutunu yürütür.(1,$)w !komut: Adreslenen satırları!komutkomutunun standart girdisine yazar. Varsayılan dosya adı ve geçerli adres değişmez.(1,$)W dosya: Adreslenen satırlarıdosyadosyasının sonuna ekler.wkomutuna benzer, ancak dosyanın önceki içeriğinin üzerine yazılmaz. Geçerli adres değişmez.(.+1)zn: Adreslenen satırdan başlayarak tek seferdensatır kaydırır.nbelirtilmezse geçerli pencere boyutu kullanılır. Geçerli adres yazdırılan son satıra ayarlanır.!komut:komutdeğerinish(1)aracılığıyla yürütür.komutdeğerinin ilk karakteri!ise bu karakter önceki!komutmetniyle değiştirilir.ed, komut için ters bölü kaçışlarını işlemez; ancak kaçışsız%karakteri varsayılan dosya adıyla değiştirilir. Kabuk yürütmeden döndüğünde standart çıktıya!yazdırılır. Geçerli satır değişmez.($)=: Adreslenen satırın satır numarasını yazdırır.(.+1)newline: Adreslenen satırı yazdırır ve geçerli adresi o satıra ayarlar.
g komutunda komut-listesi içindeki her komut ayrı bir satırda olmalı ve son satır hariç her satır ters bölü (\) ile sonlandırılmalıdır. g, G, v ve V hariç her komuta izin verilir. komut-listesi içinde tek başına yeni satır, p komutuna eşdeğerdir.
G komutunda komut-listesi biçimi g komutuyla aynıdır. Tek başına yeni satır, boş komut listesi işlevi görür. Tek &, son boş olmayan komut listesini tekrarlar.
s komutunda re ve replacement, boşluk ve yeni satır dışındaki herhangi bir karakterle sınırlandırılabilir. Son sınırlayıcılardan biri veya ikisi atlanırsa, etkilenen son satır p yazdırma soneki belirtilmiş gibi yazdırılır.
replacement içindeki kaçışsız &, o anda eşleşen metinle değiştirilir. m, [1,9] aralığında bir sayı olmak üzere \m, eşleşen metnin m. geri referans ifadesiyle değiştirilir. replacement tek bir % karakterinden oluşuyorsa son değiştirmedeki replacement kullanılır. Yeni satırlar, ters bölüyle kaçırıldıkları takdirde replacement içine gömülebilir.
Dosyalar
/tmp/ed.*: Arabellek dosyası.ed.hup: Terminal bağlantısı koptuğundaedaracının arabelleği yazmaya çalıştığı dosya.
Teşhisler
Bir hata oluştuğunda ed ? yazdırır ve girdisi bir betikten geliyorsa komut moduna döner veya çıkış yapar. Son hatanın açıklaması h komutuyla yazdırılabilir.
g komutu, başarısız arama ve değiştirmelerden kaynaklanan hataları maskelediğinden betiklerde koşullu işlemler gerçekleştirmek için kullanılabilir:
g/old/s//new/
Bu komut, old ifadesinin geçtiği tüm yerleri new ile değiştirir. u komutu global komut listesinde yer alıyorsa, komut listesi yalnızca bir kez yürütülür.
Teşhisler devre dışı bırakılmamışsa, değiştirilmiş bir arabellek yazılmadan önce ed komutundan çıkmaya veya başka bir dosyayı düzenlemeye çalışmak hatayla sonuçlanır. Komut ikinci kez girilirse başarılı olur, ancak arabelleğe yapılan tüm değişiklikler kaybolur.
Ayrıca Bakınız
sed(1), sh(1), vi(1), regex(3), compat(5)
USD:12-13
B. W. Kernighan and P. J. Plauger, Software Tools in Pascal, 1981, Addison-Wesley.
B. W. Kernighan, A Tutorial Introduction to the UNIX Text Editor.
B. W. Kernighan, Advanced Editing on UNIX.
Sınırlamalar
ed, dosya bağımsız değişkenlerini ters bölü kaçışları için işler; yani dosya adında ters bölü (\) işaretinden önce gelen tüm karakterler literal yorumlanır.
Bir metin dosyası, yani ikili olmayan dosya, yeni satır karakteriyle sonlandırılmamışsa ed dosyayı okurken veya yazarken sonuna yeni satır ekler. İkili dosyada ed okuma veya yazma sırasında yeni satır eklemez.
Satır başına ek yük: 4 int.
Tarihçe
ed komutu Version 1 AT&T UNIX sürümünde yer almıştır.
Hatalar
ed, çok baytlı karakterleri tanımaz.