man/text
man · Metin İşleme

$ ed

Bölüm 1 · Metin İşleme

metin düzenleyici

Ö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. ed standart girdiyi bir betikten okuyorsa bu seçenek kullanılmalıdır.
  • -p string: Komut istemi belirtir. Bu istem, P komutuyla 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: Arabellekteki n. satır. n, [0,$] aralığında bir sayıdır.
  • - veya ^: Önceki satır. -1 ile eşdeğerdir ve birikimli etkiyle tekrarlanabilir.
  • -n veya ^n: n negatif olmayan bir sayı olmak üzere n. önceki satır.
  • +: Sonraki satır. +1 ile eşdeğerdir ve birikimli etkiyle tekrarlanabilir.
  • +n: n negatif olmayan bir sayı olmak üzere n. 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/: re dü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?: re dü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 önce k komutuyla 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 bir c karakteri kendisiyle eşleşir.
  • \c: {, }, (, ), < ve > hariç, ters bölüyle kaçış yapılmış herhangi bir c karakteri kendisiyle eşleşir.
  • .: Herhangi bir tek karakterle eşleşir.
  • [char-class]: char-class içindeki herhangi bir tek karakterle eşleşir. char-class iç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ğin a-z küçük harfleri belirtir.
  • [^char-class]: Yeni satır hariç, char-class içinde yer almayan herhangi bir tek karakterle eşleşir. char-class yukarı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\): Bir re alt ifadesini tanımlar. Alt ifadeler iç içe yerleştirilebilir. Daha sonra \n biçimindeki geri referans, n değeri [1,9] aralığında olmak üzere n. 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ğin b*, boş eşleşme en soldaki tek eşleşme olduğundan abbb dizesinin başıyla eşleşir.
  • \{n,m\}, \{n,\} veya \{n\}: Hemen öncesindeki tek karakterlik düzenli ifade veya alt ifadeyle en az n, en fazla m kez eşleşir. m belirtilmezse en az n kez eşleşir. Virgül de belirtilmezse tam olarak n kez 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: dosya dosyasını düzenler ve varsayılan dosya adını ayarlar. dosya belirtilmezse 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: !komut komutunun 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: dosya dosyasını koşulsuz olarak düzenler. e komutuna 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ı dosya olarak ayarlar. dosya belirtilmezse, kaçış karakterlerinden arındırılmış varsayılan dosya adı yazdırılır.
  • (1,$)g/re/komut-listesi: re düzenli ifadesiyle eşleşen adreslenmiş satırların her birine komut-listesi uygular. Geçerli adres, komut-listesi yürütülmeden önce o anda eşleşen satıra ayarlanır. g komutunun sonunda geçerli adres, komut-listesi tarafından etkilenen son satıra ayarlanır.
  • (1,$)G/re/: re dü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ıdan komut-listesi girmesi istenir. G komutunun sonunda geçerli adres, en son komut-listesi tarafı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çin ed betiklerinin 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 harfli lc harfiyle işaretler. Satır daha sonra sonraki komutlarda 'lc olarak 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, 0 adresi 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 string ile istem belirtilmediği sürece komut istemi varsayılan olarak kapalıdır.
  • q: ed komutundan çıkar.
  • Q: ed komutundan koşulsuz olarak çıkar. q komutuna benzer, ancak kaydedilmemiş değişiklikler uyarı yapılmadan atılır.
  • ($)r dosya: dosya dosyasını adreslenen satırdan sonrasına okur. dosya belirtilmezse varsayılan dosya adı kullanılır. Komuttan önce varsayılan dosya adı yoksa varsayılan dosya adı dosya olarak ayarlanır; aksi halde değişmez. Geçerli adres okunan son satıra ayarlanır.
  • ($)r !komut: !komut komutunun 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ırlarda re düzenli ifadesiyle eşleşen metni replacement ile 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: n pozitif bir sayı olmak üzere yalnızca n. eşleşmeyi değiştirir.
  • (.,.)s: Son değiştirmeyi tekrarlar. Bu biçim, bir n sayım soneki veya r, g ve p karakterlerinin herhangi bir kombinasyonunu kabul eder. n verilirse yalnızca n. eşleşme değiştirilir; r son değiştirme yerine son aramanın düzenli ifadesini kullanır; g son değiştirmenin global sonekini açar veya kapatır; p son 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, 0 adresi 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, v ve V global komutları geri alma işlemi tarafından tek komut olarak kabul edilir. u kendi kendisinin tersidir.
  • (1,$)v/re/komut-listesi: re düzenli ifadesiyle eşleşmeyen adreslenmiş satırların her birine komut-listesi uygular. g komutuna benzer.
  • (1,$)V/re/: re düzenli ifadesiyle eşleşmeyen adreslenmiş satırları etkileşimli olarak düzenler. G komutuna benzer.
  • (1,$)w dosya: Adreslenen satırları dosya dosyasına yazar. Dosyanın önceki tüm içeriği uyarı yapılmadan kaybolur. Varsayılan dosya adı yoksa dosya varsayı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ı dosya dosyasına yazar ve ardından q komutunu yürütür.
  • (1,$)w !komut: Adreslenen satırları !komut komutunun standart girdisine yazar. Varsayılan dosya adı ve geçerli adres değişmez.
  • (1,$)W dosya: Adreslenen satırları dosya dosyasının sonuna ekler. w komutuna 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 seferde n satır kaydırır. n belirtilmezse geçerli pencere boyutu kullanılır. Geçerli adres yazdırılan son satıra ayarlanır.
  • !komut: komut değerini sh(1) aracılığıyla yürütür. komut değerinin ilk karakteri ! ise bu karakter önceki !komut metniyle 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ğunda ed aracı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.