ex (/usr/bin/ex) ist einzeilenorientierter Editor und Bestandteil vonUnix- und unixartigen Systemen. Er gehört zu einer Familie von Editoren, zu denen interaktiv benutzbare (ed undvi), aber auch solche für den Batchbetrieb (sed) gehören und die voneinander abgeleitet sind.
ex ist in Funktionsumfang und Verhalten normiert durch denPOSIX-Standard.[1]
Der originaleex war eine erweiterte Version des – damaligen – Unix-Standardeditorsed, welcher seinerseits Teil derBerkeley Software Distribution (BSD) war. Die Weiterentwicklungex verbesserte im Vergleich zued vor allem die Benutzerfreundlichkeit, ohne allerdings das Grundkonzept des zeilenorientierten Editors anzutasten. Später nahmBill Joyex als Grundlage und entwickelte darauf – zuerst in Form eines Makro-Pakets, später als eigenständiges Programm – den Editorvi. Deshalb kann dervi auch mit einem Befehl in einenex-Modus geschaltet werden.
Einstellungsmöglichkeiten unterscheiden sich von System zu System aufgrund leicht unterschiedlicher Implementierungen, wenn es auch einen immer vorhandenen, gemeinsamen Grundstock gibt. Alle aktuell gültigen Einstellungen können während der Session durch den Befehlset all angezeigt werden. Das folgende Beispiel zeigt dies wie auch den Programmaufruf selbst auf einem aktuellenAIX-System (oslevel 7100-04-02-1614). Die Hervorhebungen sind im Original nicht vorhanden und dienen lediglich der Verdeutlichung:
$ex .kshrc".kshrc" 129/2238:set allautoindent mesg noshowmodeautoprint nomodeline noslowopennoautowrite nonumber tabstop=8nobeautify nonovice taglength=0closepunct='".,;)]} nooptimize tags=tags /usr/lib/tagsdirectory=/var/tmp paragraphs=IPLPPPQPP LIpplpipbp backtagnoedcompatible partialcharacter=- term=xterm-r5noerrorbells prompt terseexrc noreadonly timeoutnoflash redraw ttytype=xterm-r5hardtabs=8 remap warnhistory=0 report=5 window=39noignorecase scroll=19 wrapscanlinelimit=1048560 sections=NHSHH HUuhsh+c wrapmargin=0nolisp shell=/usr/bin/ksh nowriteanynolist shiftwidth=5 wraptype=wordmagic noshowmatch
Einstellungen sind entweder deklarativer Natur, wo einem Bezeichner ein Wert zugewiesen wird (siehe im Beispiel etwattytype) oder logisch. Bei logischen Einstellungen wird traditionell der Bezeichner mit einem vorangestelltenno aus- und ohne dieses Präfix eingeschaltet (siehe etwanonumber, der Befehlset number schaltet die Ausgabe von Zeilennummern ein,set nonumber stellt dieses Verhalten ab).
Die Anweisungen zum Einstellen vonex werden beim Start des Programms aus Dateien entnommen. Systemweite Einstellungen stehen in/etc/exrc. Benutzerbezogene Einstellungen stehen in$HOME/.exrc. Ist die Optionexrc gesetzt, wird die Datei./.exrc ausgewertet.
Einstellungen werden auch aus derUmgebungsvariableEXINIT übernommen.
Oft wird die Funktionalität vonex durch andere Programme zur Verfügung gestellt, z. B. vonvim. Dann ändern sich die Dateinamen für die Einstellungen oder es werden zusätzliche Dateien ausgewertet (z. B./etc/vim/vimrc,$HOME/.vimrc,./.vimrc).
Auch wennex für die interaktive Benutzung gedacht war, ist es doch möglich, dem Programm eine Liste von Befehlen überstdin (entweder alsPipeline oder alsHere-Document) zur automatisierten Abarbeitung zu übergeben. Dies macht es möglich, den Editor ähnlich wiesed für automatisierte Änderungen einzusetzen.
Im folgenden Script-Beispiel wird in allen Dateien in/some/where, deren Name auftxt endet, in solchen non-interaktiven Editorsessions geändert (und zwar jedes Auftreten von "abc" in den ersten drei Zeilen in "XYZ"). Man beachte, dass, im Unterschied zused, die geänderte Datei nicht erst in eine temporäre Zwischendatei gespeichert und anschließend über das Original kopiert zu werden braucht:
#!/bin/kshtypeset chSrc="abc"typeset chRpl="XYZ"typeset fTgt=""for fTgt in /some/where/*txt ; do ex - "$fTgt" <<-EOF 1,3 s/$chSrc/$chRpl/g w EOFdone
Auf einigenHP-UX-Systemen kannex auch durch den Befehle (das ist dann einHardlink aufex) aufgerufen werden.
ex: text editor – Open Group Base Specificationex(1): ex, vi, view – text editors – OpenBSD General CommandsManual