-01 33 01-4 Sleduyushchaya gruppa klyuchej yavlyaetsya vzaimoisklyuchayushchej: -e Privodit k sozdaniyu spiska komand a, c i d dlya redaktora ed, kotoryj vossozdaet "fajl2" iz "fajla1". Sleduyushchaya programma dlya interpretatora komand sovmestno s opciej "-e" pomogaet sopro- vozhdat' neskol'ko versij fajla. Pod rukami nuzhno imet' tol'ko ishodnuyu versiyu fajla ($1) i cepoch- ku spiskov komand ed dlya perehoda ot odnoj ver- sii k drugoj, poluchennyh s pomoshch'yu ed ($2, &3, ...). "poslednyaya versiya" pomeshchaetsya v stan- dartnyj fajl vyvoda: (shift; cat $*; echo '1,$p') ! ed -$1 ; -f Generiruet spisok analogichnyj "-e", ne ispol'zu- emyj s ed, i v obratnom poryadke; -c Vydaet kontekst,v kotorom vstrechayutsya izmenennye stroki. Po umolchaniyu vydaetsya tri stroki do i tri stroki posle razlichayushchihsya strok. CHislo do- polnitel'no vydavaemyh strok mozhno zadavat'. Tak komanda s klyuchom "-c10", budet vydavat' 10 strok do i 10 strok posle kazhdoj razlichayushchejsya stro- ki. Krome togo, pri zadanii "-c" vydayutsya imena sravnivaemyh fajlov s datami ih sozdaniya. Soob- shcheniya o kazhdom izmenenii razdelyayutsya strokami "**********". Stroki,otsutstvuyushchie v fajle1,mar- kiruyutsya simvolom "-".Stroki,dobavlennye v faj- l2,simvolom "+". izmenennye stroki simvolom "!"; 124 APK 00210-01 33 01-4 -Dstroka Sozdaet ob'edinennuyu versiyu fajlov (fajl1 i fajl2), okruzhaya vse razlichayushchiesya stroki direk- tivami uslovnoj kompilyacii preprocessora yazyka Si. Pri etom "stroka" ispol'zuetsya v kachestve argumenta direktiv preprocessora. Tak, esli v fajlax file1 i file2 razlichaetsya stroka: long int k=1000000 /* stroka iz file1 */ int k=1000000 /* stroka iz file2 */ komanda: diff -DLONGINT file1 file2 provodit vydachu v standartnyj vyvod fajla, v ko- torom dannaya stroka budet zamenena na sleduyushchuyu konstrukciyu: #ifndef LONGINT long int k=1000000 /* stroka iz file1 */ #else int k=1000000 /* stroka iz file2 */ #endif -h Vypolnyaet svoyu rabotu bystro i grubo. Ona rabo- taet tol'ko v teh sluchayah, kogda uchastki izmene- nij maly i horosho otdeleny drug ot druga, odnako mozhet obrabatyvat' fajly neogranichennoj dliny. S klyuchom "-h" ne dopuskayutsya klyuchi "-e" i "-f". Za isklyucheniem redkih sluchaev, diff nahodit naimen'shij 125 APK 00210-01 33 01-4 dostatochnyj nabor razlichij fajlov. FAJLY: /tmp/d????? /usr/lib/diffh dlya klyucha "-h". DOPOLNITELXNYE SSYLKI: cmp, comm, ed DIAGNOSTIKA: Kod vozvrata raven: 0 - esli net razlichij; 1 - esli razlichiya est'; 2 - esli vypolenie komandy neudachno. ZAMECHANIYA: Spiski redaktirovaniya, generiruemye s klyuchami "-e" i "-f", ne sozdayut strok, sostoyashchih iz odnoj ".". 126 APK 00210-01 33 01-4 IMYA: diff3 - sravnenie treh fajlov. FORMAT: diff3 [-eh3] fajl1 fajl2 fajl3 OPISANIE: Komanda diff3 sravnivaet tri versii fajla i soobshchaet stepeni rassoglasovaniya tekstov, otmechaemye sleduyushchimi kodami: ==== vse tri fajla razlichny; ====1 otlichaetsya "fajl1"; ====2 otlichaetsya "fajl2"; ====3 otlichaetsya "fajl3". Vid izmeneniya, pozvolyayushchij preobrazovat' dannyj uchas- tok dannogo fajla, ukazyvaetsya odnim iz sleduyushchih spo- sobov: f:n1 a tekst dolzhen byt' dobavlen posle stroki s nome- rom n1 v fajle "f", gde f=1, 2 ili 3. f:n1,n2 c Tekst dolzhen byt' izmenen na uchastke ot stroki n1 do stroki n2. Esli n1=n2, uchastok mozhet byt' sokrashchen do n1. Ishodnoe soderzhimoe uchastka privoditsya srazu zhe posle 127 APK 00210-01 33 01-4 ukazaniya "c". Esli soderzhimoe dvuh fajlov odinakovo, soderzhimoe fajla s men'shim nomerom ne vyvoditsya. S klyuchom "-e" diff3 sozdaet komandnyj fajl dlya redak- tora ed, kotoryj vklyuchit v "fajl1" vse izmeneniya mezhdu fajlami "fajl2" i "fajl3", t.e. izmeneniya, kotorye normal'no byli by pomecheny "====" i "====3". Opciya "-x" ("-3") sozdaet komandnyj fajl dlya vklyucheniya tol'ko izmenenij, otmechaemyh "====" ("====3"). Sledu- yushchaya komanda primenit poluchennyj v rezul'tate ko- mandnyj fajl (script) k fajlu "fajl1": (cat script; echo '1,$p') | ed - fajl1 FAJLY: /tmp/d3????? /usr/lib/diff3 DOPOLNITELXNYE SSYLKI: diff ZAMECHANIYA: Stroki teksta, sostoyashchie iz odnoj ".", narushayut rabotu "-e". Fajly, dlina kotoryh prevyshaet 64K bajt, ne obrabaty- vayutsya. 128 APK 00210-01 33 01-4 IMYA: du - pechat' svedenij ob ispol'zovanii diskov. FORMAT: du [-s] [-a] [imya...] OPISANIE: Komanda du vydaet chislo blokov, zanimaemyh vsemi faj- lami i spravochnikami (rekursivno), soderzhashchmisya vnutri kazhdogo zadannogo spravochnika ili fajla "imya". Esli "imya" otsutstvuet, ispol'zuetsya ".". Klyuch "-s" vyzyvaet vydachu tol'ko obshchego itoga. Klyuch "-a" vyzyvaet vyvod soobshcheniya po kazhdomu fajlu. Pri otsutstvii klyucha soobshcheniya generiruyutsya tol'ko po spravochnikam. Fajly, kotorye imeyut neskol'ko al'ternativnyh imen, uchityvayutsya tol'ko odin raz. ZAMECHANIYA: Esli v kachestve parametrov zadany ne spravochniki i ne ukazan klyuch "-a", to oni ne raspechatyvayutsya. Esli imeetsya slishkom mnogo razlichnyh al'ternativnyh imen fajlov, komanda du uchityvaet izbytochnye fajly po neskol'ko raz. 129 APK 00210-01 33 01-4 IMYA: ES - postroitel' sredy Paskalya FORMAT: ES OPISANIE: ES prinimaet na standartnom vhode ishodnyj tekst prog- rammy na Paskale i izvlekaet ob'yavleniya. |ta komanda pozvolyaet sozdavat' sredu dlya $x-opcii kompilyacii. 130 APK 00210-01 33 01-4 IMYA: echo - vydacha parametrov. FORMAT: echo [-n] [param] ... OPISANIE: Komanda echo zapisyvaet svoi parametry, razdelennye probelami i zakanchivayushchiesya simvolom novoj stroki, v standartnyj fajl vyvoda. Esli ispol'zuetsya flag "-n", k vyvodu ne dobavlyaetsya simvol novoj stroki. Komanda echo ispol'zuetsya dlya vydachi diagnosticheskih soobshchenij v programmah interpretatora komand i dlya za- pisi postoyannyh dannyh v potokah. Dlya posylki diagnos- ticheskogo soobshcheniya v standartnyj fajl oshibok vypolni- te komandu: echo "tekst soobshcheniya" 1>&2 131 APK 00210-01 33 01-4 IMYA: ed - strochnyj redaktor tekstov. FORMAT: ed [-] [-h] [imya] OPISANIE: Dlya UNIX-obraznyh sistem, ed yavlyaetsya standartnym re- daktorom tekstov. Pri interaktivnoj rabote on ustupaet po udobstvu poliekrannomu redaktoru, no mozhet rabotat' s lyubymi terminalami (naprimer, s teletajpami). Redaktor ed rabotaet s kopiej redaktiruemogo fajla. Sdelannye v kopii izmeneniya ne vliyayut na ishodnyj fajl do teh por, poka ne budet vydana komanda "w" (zapis'). Kopiya redaktiruemogo teksta razmeshchaetsya vo vremennom fajle, nazyvaemom "buferom". Esli zadan parametr "imya", ukazannyj fajl schityvaetsya v bufer redaktora dlya posleduyushchej obrabotki. Esli uka- zan klyuch "-h", pered chteniem fajla vypolnyaetsya komanda "x" dlya raboty s zashifrovannymi fajlami. Klyuch "-" po- davlyaet pechat' poyasnitel'nyh soobshchenij i ispol'zuetsya pri vvode instrukcij redaktirovaniya iz komandnogo fajla. Komandy redaktora ed imeyut prostuyu i regulyarnuyu struk- turu: 0 ili neskol'ko "ukazatelej", za kotorymi sledu- et odnosimvol'noe "imya komandy" i, vozmozhno, paramet- ry. "Ukazateli" opredelyayut odnu ili neskol'ko strok v 132 APK 00210-01 33 01-4 bufere. Propushchennye adresa dopolnyayutsya po umolchaniyu. Vo vremya raboty ed mozhet nahodit'sya libo v komandnom rezhime (kogda vvodimye stroki rassmatrivayutsya kak instrukcii redaktirovaniya), libo v rezhime vvoda (t.e. nabiraemaya informaciya prosto perepisyvaetsya v fajl). V nachale seansa redaktor nahoditsya v komandnom rezhime. Esli byl perehod v rezhim vvoda, redaktor vosprinimaet tol'ko odnu komandu - vyhod iz dannogo rezhima (tochka v pervoj pozicii stroki). V redaktore ed v ogranichennom vide ispol'zuetsya ponya- tie "regulyarnogo vyrazheniya". Regulyarnoe vyrazhenie op- redelyaet mnozhestvo strok simvolov. Govoryat, chto chlen etogo mnozhestva sootvetstvuet etomu regulyarnomu vyra- zheniyu. V privedennom opredelenii regulyarnyh vyrazhenij slovo "simvol" oznachaet lyuboj simvol, za isklyucheniem simvola novoj stroki: 1) Lyuboj simvol, za isklyucheniem special'nyh simvo- lov, sootvetstvuet samomu sebe. Special'nymi sim- volami yavlyayutsya razdelitel' regulyarnyh vyrazhenij, znaki "[." i, inogda "^*$"; 2) "." sootvetstvuet lyubomu simvolu; 3) " niem cifry ili "()", sootvetstvuet etomu simvolu; 4) Nepustaya stroka "s", zaklyuchennaya v kvadratnye skobki ([s] ili [^s]), sotvetstvuet lyubomu simvo- 133 APK 00210-01 33 01-4 lu,vhodyashchemu (ili ne vhodyashchemu) v stroku "s". Vnutri stroki "s" simvol " go znacheniya, a "]" mozhet poyavlyat'sya tol'ko v ka- chestve pervoj bukvy. Podstroka "a-b", gde "a" i "b" raspolozheny v vozrastayushchem poryadke otnosi- tel'no russkogo ili latinskogo alfavitov (dlya special'nyh simvolov otnositel'no koda KOI-8), oboznachaet diapazon simvolov ot "a" do "b", vklyu- chitel'no; 5) Regulyarnoe vyrazhenie vida 1-4, za kotorym sleduet "*", opredelyaet posledovatel'nost' iz 0 ili bolee sootvetstvij etomu regulyarnomu vyrazheniyu; 6) Regulyarnoe vyrazhenie "x", nahodyashcheesya mezhdu " i ")", sootvetstvuet tomu zhe, chto i "x"; 7) Znak " toj zhe stroke, chto i nahodyashcheesya v skobkah regu- lyarnoe vyrazhenie, nachinayushcheesya s n-oj " 8) Regulyarnoe vyrazhenie "x" vida 1-8, za kotorym sleduet regulyarnoe vyrazhenie "y" vida 1-7, soot- vetstvuet sootvetstvie dlya "x", za kotorym sledu- et sootvetstvie dlya "y", prichem sootvetstvie dlya "x" vybiraetsya kak mozhno bol'shim, odnako dopuska- yushchim sootvetstvie dlya "y"; 9) Regulyarnoe vyrazhenie vida 1-8, kotoromu pred- shestvuet "^" (ili za kotorym sleduet "$"), ogra- 134 APK 00210-01 33 01-4 nicheno sootvetstviyami, nachinayushchimisya v levom (ili zakanchivayushchimisya v pravom) konce stroki; 10) Regulyarnoe vyrazhenie vida 1-9 vybiraet samoe dlinnoe i krajnee sleva sootvetstvie v stroke; 11) Pustoe regulyarnoe vyrazhenie zamenyaet poslednee vstrechennoe regulyarnoe vyrazhenie. Regulyarnye vyrazheniya ispol'zuyutsya v adresah dlya opre- deleniya strok, a takzhe v odnoj komande (s) dlya oprede- leniya chasti stroki, kotoruyu nuzhno zamenit'. Esli tre- buetsya ispol'zovat' odin iz metasimvolov regulyarnyh vyrazhenij v kachestve obychnogo simvola, etomu simvolu dolzhna predshestvovat' " lam, svyazyvayushchim regulyarnye vyrazheniya (chasto "/"), tak i k samomu simvolu " Dlya ponimaniya sistemy adresacii v redaktore ed neobho- dimo predstavlyat' sebe, chto v kazhdyj moment vremeni sushchestvuet "tekushchaya stroka". Voobshche govorya, tekushchaya stroka predstavlyaet soboj poslednyuyu stroku, obrabotan- nuyu nekotoroj komandoj, odnako tochnoe vliyanie na polo- zhenie tekushchej stroki rassmatrivaetsya v opisanii komand. Adresa stroyatsya sleduyushchim obrazom. 1) Simvol "." adresuet tekushchuyu stroku; 2) Simvol "$" adresuet poslednyuyu stroku bufera; 3) Desyatichnoe chislo "n" adresuet n-uyu stroku bufera; 135 APK 00210-01 33 01-4 4) "/x" ukazyvaet stroku, pomechennuyu imenem "x", ko- toroe dolzhno predstavlyat' soboj maluyu bukvu. Stroki pomechayutsya s pomoshch'yu komandy "k", kotoraya opisana nizhe; 5) Regulyarnoe vyrazhenie, zaklyuchennoe v simvoly "/", ukazyvaet stroku, kotoraya opredelyaetsya putem po- iska vpered ot tekushchej stroki do pervoj stroki, soderzhashchej posledovatel'nost' simvolov, soot- vetstvuyushchuyu dannomu regulyarnomu vyrazheniyu. Pri neobhodimosti posle dostizheniya konca bufera poisk prodolzhaetsya s ego nachala; 6) Regulyarnoe vyrazhenie, zaklyuchennoe v voprositel'- nye znaki "?", adresuet stroku, kotoraya opredelya- etsya putem poiska nazad ot tekushchej stroki do pervoj stroki, soderzhashchej posledovatel'nost' sim- volov, sootvetstvuyushchuyu dannomu regulyarnomu vyra- zheniyu. Pri neobhodimosti posle dostizheniya nachala bufera poisk prodolzhaetsya s ego konca; 7) Adres, za kotorym sleduet znak "+" ili znak "-" i desyatichnoe chislo, opredelyaet etot adres plyus (ili minus) ukazannoe kolichestvo strok. Znak plyus mozhet byt' opushchen; 8) Esli adres nachinaetsya so znaka "+" ili "-", vy- polnyaetsya slozhenie ili vychitanie po otnosheniyu k tekushchej stroke. Naprimer, "-5" oznachaet ".-5". 136 APK 00210-01 33 01-4 9) Esli adres zakanchivaetsya znakom "+" ili "-", k nemu dobavlyaetsya (ili vychitaetsya) 1. Kak sledstvie etogo pravila i pravila 8, adres "-" otnositsya k stroke, kotoraya predshestvuet tekushchej stroke. Bolee togo, znaki "+" i "-" v konce obla- dayut effektom nakopleniya, tak chto "--" otnositsya k tekushchej stroke minus 2. 10) Simvol "^" v adresah ekvivalenten simvolu "-". Komandy mogut trebovat' ni odnogo, odin ili dva adre- sa. Komandy, v kotoryh ne trebuetsya adres, rassmatri- vayut nalichie adresa kak oshibku. Esli v komandah, gde trebuetsya odin ili dva adresa, ukazano nedostatochnoe kolichestvo adresov, prinimayutsya standartnye adresa. Esli v komande ukazano bol'she adresov, chem trebuetsya, ispol'zuyutsya poslednie odin ili dva adresa (v zavisi- mosti ot togo, skol'ko nuzhno). Obychno adresa otdelyayutsya drug ot druga s pomoshch'yu zapya- toj ",". Oni mogut razdelyat'sya takzhe tochkoj s zapyatoj ";". V etom sluchae tekushchaya stroka "." ustanavlivaetsya na pervyj adres pered tem, kak interpretiruetsya sledu- yushchij. |ta osobennost' mozhet byt' ispol'zovana pri op- redelenii nachal'noj stroki dlya pryamogo i obratnogo po- iska ("/", "?"). Vtoroj adres lyuboj dvuhadresnoj pos- ledovatel'nosti dolzhen sootvetstvovat' stroke, sledu- yushchej za strokoj, kotoraya sootvetstvuet pervomu adresu. V privedennom spiske komand redaktora ed standartnye 137 APK 00210-01 33 01-4 adresa ukazany v skobkah. Skobki ne yavlyayutsya chast'yu adresa, a ispol'zuyutsya lish' dlya togo, chtoby pokazat', chto dannye adresa yavlyayutsya standartnymi. Kak otmechalos' ranee, poyavlenie v odnoj stroke nes- kol'kih komand v obshchem sluchae yavlyaetsya oshibkoj. Odna- ko, k bol'shinstvu komand mogut byt' dobavleny komandy "p" ili "l", kotorye vyzyvayut raspechatku tekushchej stro- ki v odnom iz dvuh formatov. K komandam mozhet takzhe dobavlyat'sya komanda "n", koto- raya vyzyvaet pechat' nomera stroki v vyvode komandy. |ti suffiksy mogut ob'edinyat'sya v lyubom poryadke. (.)a <tekst> . Komanda dozapisi - schityvaet ukazannyj tekst i dobavlyaet ego posle stroki s ukazannym adresom. "." ostaetsya v poslednej vvedennoj stroke, esli ona imeetsya, v protivnom sluchae - v adresuemoj stroke. V etoj komande dopuskaetsya adres "0", pri etom tekst pomeshchaetsya v nachalo bufera. (.,.)c <tekst> . Komanda zameny udalyaet adresuemye stroki, zatem schityvaet vvodimyj tekst, kotoryj zamenyaet eti 138 APK 00210-01 33 01-4 stroki. "." ostaetsya v poslednej vvedenoj stro- ke; esli takovyh ne bylo, ona ostaetsya v stroke, predshestvovavshej udalennym strokam. (...) d Komanda udaleniya udalyaet adresuemye stroki iz bufera. Tekushchej stanovitsya stroka, pervonachal'no nahodivshayasya posle poslednej udalennoj stroki. Esli udalennye stroki raspolagalis' v konce, te- kushchej strokoj stanovitsya novaya poslednyaya stroka. e imya_fajla Komanda redaktirovaniya vyzyvaet udalenie vsego soderzhimogo bufera i posleduyushchee schityvanie v nego fajla s ukazannym imenem. "." ustanavliva- etsya na poslednej stroke bufera. Pechataetsya ko- lichestvo schitannyh simvolov. "imya_fajla" zapomi- naetsya dlya vozmozhnogo ispol'zovaniya v kachestve standartnogo imeni fajla v posleduyushchih komandah r ili w. Esli "imya_fajla" otsutstvuet, ispol'zu- etsya zapomnennoe imya. E imya_fajla |ta komanda vypolnyaet te zhe dejstviya, chto i ko- manda "e", za isklyucheniem togo, chto ne vydaetsya diagnosticheskih soobshchenij, esli posle poslednego izmeneniya bufera ne byla vydana komanda "w". f imya_fajla Komanda pechati imeni fajla raspechatyvaet tekushchee 139 APK 00210-01 33 01-4 zapomnennoe imya fajla. Esli ukazyvaetsya "imya_fajla", tekushchee zapomnennoe imya fajla zame- nyaetsya na "imya_fajla". (1,$) g/regulyarnoe vyrazhenie/spisok komand V etoj komande na pervom shage pomechayutsya vse stroki, kotorye sootvetstvuyut zadannomu regulyar- nomu vyrazheniyu. Posle etogo dlya kazhdoj takoj stroki vypolnyaetsya zadannyj spisok komand, pri- chem "." pervonachal'no ustanavlivaetsya v etoj stroke. Odna komanda ili pervaya iz neskol'kih komand raspolagaetsya v toj zhe stroke, chto i ko- manda "g". Vse stroki spiska, sostoyashchie iz nes- kol'kih strok, dolzhny zakanchivat'sya simvolom " reblenie komand "a", "i" "c" i svyazannogo s nimi vvoda. ".", zavershayushchaya rezhim vvoda, mozhet byt' opushchena, esli ona nahoditsya v poslednej stroke spiska komand. Komandy "g" i "v" v spiske komand ne dopuskayutsya. (.)i <tekst> . |ta komanda vstavlyaet zadannyj tekst pered adre- suemoj strokoj. "." ostaetsya v poslednej vvodi- moj stroke ili, esli ee net, v stroke pered ad- resuemoj strokoj. |ta stroka otlichaetsya ot ko- 140 APK 00210-01 33 01-4 mandy a tol'ko mestom, kuda pomeshchaetsya tekst. (.,.+1)j |ta stroka ob'edinyaet adresuemye stroki v odnu stroku. Promezhutochnye simvoly novoj stroki pros- to ischezayut. "." ostaetsya v rezul'tiruyushchej stro- ke. (.)kh Komanda markirovaniya prisvaivaet adresuemoj stroke imya "h", kotoroe dolzhno predstavlyat' soboj maluyu bukvu. Vposledstvii dannaya stroka mozhet adresovat'sya s pomoshch'yu formy adresa "'h". (.,.)l |ta komanda raspechatyvaet adresuemye stroki pod- robnym obrazom: negraficheskie simvoly pechatayutsya v vide dvuh vos'merichnyh cifr, a dlinnye stroki perenosyatsya. Komanda "l" mozhet raspolagat'sya v odnoj i toj zhe stroke posle lyuboj ne svyazannoj s vvodom-vyvodom komandy. (.,.)ma Komanda peresylki peremeshchaet adresuemye stroki i pomeshchaet ih posle stroki, adresuemoj s pomoshch'yu "a". Poslednyaya iz peremeshchennyh strok stanovitsya tekushchej strokoj. (.,.)n Komanda numeracii raspechatyvaet adresuemye stro- ki vmeste s nomerami strok i simvolom tabulyacii 141 APK 00210-01 33 01-4 sleva. (.,.)p |ta komanda raspechatyvaet adresuemye stroki. "." ostaetsya v poslednej raspechatannoj stroke. Komanda p mozhet raspolagat'sya v odnoj i toj zhe stroke posle lyuboj ne svyazannoj s vvodom-vyvodom komandy. (.,.)P |ta komanda yavlyaetsya sinonimom komandy "p". q Komanda vyhoda vyzyvaet vyhod iz redaktora ed. Avtomaticheskaya zapis' v fajl ne proizvoditsya. Q |ta komanda analogichna komande "q", za isklyuche- niem togo, chto ne vydaetsya diagnosticheskih soob- shchenij, esli posle poslednego izmeneniya bufera ne byla vydana komanda "w". ($)r imya_fajla Komanda chteniya schityvaet ukazannyj fajl i pome- shchaet rezul'tat posle adresuemoj stroki. Esli imya fajla ne ukazano, ispol'zuetsya zapomnennoe imya fajla, esli takovoe imeetsya (sm. komandy "l" i "f"). Imya fajla zapominaetsya, esli uzhe ne bylo zapomnennogo imeni fajla. Dlya komandy "r" dopus- kaetsya adres "0", kotoryj privodit k tomu, chto fajl schityvaetsya v nachalo bufera. Esli schityva- nie proshlo uspeshno, pechataetsya kolichestvo schi- 142 APK 00210-01 33 01-4 tannyh simvolov. "." ostaetsya v poslednej schi- tannoj iz fajla stroke. (.,.)s/regulyarnoe vyrazhenie/zamena/ ili (.,.)s/regulyarnoe vyrazhenie/zamena/g Komanda podstanovki prosmatrivaet kazhduyu adresu- emuyu stroku na predmet sootvetstviya zadannomu regulyarnomu vyrazheniyu. Esli posle komandy ukazan indikator global'nogo zameshcheniya "g", v kazhdoj stroke, v kotoroj obnaruzheno sootvetstvie, vse sootvetstvuyushchie posledovatel'nosti simvolov za- meshchayutsya ukazannoj "zamenoj". Esli indikator global'nogo zameshcheniya otsutstvuet, zamenyaetsya tol'ko pervaya sootvetstvuyushchaya posledovatel'nost' simvolov. Esli podstanovka ne vypolnyaetsya ni v odnoj iz adresuemyh strok, eto yavlyaetsya oshibkoj. Dlya razdeleniya regulyarnogo vyrazheniya i zameny vmesto "/" mozhet ispol'zovat'sya lyuboj simvol punktuacii. "." ostaetsya v poslednej stroke, gde byla vypolnena podstanovka. Ampersand "&", vstrechayushchijsya v zamene, zamenyaetsya strokoj sim- volov, sootvetstvuyushchej regulyarnomu vyrazheniyu. Special'noe znachenie simvola "&" v ukazannom kontekste mozhet byt' otmeneno posredstvom ukaza- niya pered nim " zameshchayutsya tekstom, sootvetstvuyushchim n-omu regu- lyarnomu vyrazheniyu, zaklyuchennomu mezhdu " i ")". Esli imeyutsya vlozhennye podvyrazheniya v 143 APK 00210-01 33 01-4 skobkah, "n" opredelyaetsya putem podscheta sluchaev upotrebleniya " nachinaya sleva. Stroki mogut byt' razdeleny posredstvom podstanovki v nih simvolov novoj stroki. Simvoly novoj stroki v stroke zameny dolzhny byt' vydeleny posredstvom ukazaniya pered nimi simvola " zaklyuchitel'nyh razdelitelya mogut byt' opushcheny, podrazumevaya suffiks "p". Special'naya forma ko- mandy "s" bez posleduyushchih razdelitelej povtoryaet poslednyuyu komandu podstanovki dlya adresuemyh strok. Posle "s" mogut sledovat' bukvy "r" (is- pol'zovat' poslednee regulyarnoe vyrazhenie v levoj storone vmesto poslednej komandy podsta- novki v levoj storone), "p" (dopolnyaet ustanovku suffiksa "p" dlya predydushchej ustanovki) i g (do- polnyaet ustanovku suffiksa "g"). |ti bukvy mogut ob'edinyat'sya v lyubom poryadke. (.,.)t a |ta komanda rabotaet analogichno komande "m", za isklyucheniem togo, chto kopiya adresuemyh strok po- meshchaetsya posle adresa "a" (kotoryj mozhet byt' 0). "." ostaetsya v poslednej stroke kopii. (.,.)u Komanda annulirovaniya vosstanavlivaet bufer, vozvrashchaya ego v sostoyanie, kotoroe on imel pered poslednej komandoj modifikacii bufera. Polozhenie tekushchej stroki takzhe vosstanavlivaetsya. Komanda- 144 APK 00210-01 33 01-4 mi, modificiruyushchimi bufer, yavlyayutsya "a, c, d, g, i, k i v". Pri anulirovanii "g" i "v" rassmatri- vayutsya kak odinochnye komandy modifikacii bufera. Komanda anulirovaniya yavlyaetsya inversnoj po otnosheniyu k samoj sebe. Kogda redaktoru ed ne hvataet pamyati, polnoe annulirovanie nevozmozhno, i komanda "u" mozhet annulirovat' tol'ko vliyanie poslednej podstanovki v tekushchej stroke. Takoe ogranichennoe annulirovanie otnositsya takzhe i k komandnym fajlam redaktora, kogda ed vyzyvaetsya s klyuchem "-". (1,$)v/regulyarnoe vyrazhenie/spisok komand |ta komanda analogichna komande "g", za isklyuche- niem togo, chto spisok komand vypolnyaetsya pri na- chal'noj ustanovke "." na kazhduyu stroku krome teh, kotorye sootvetstvuyut regulyarnomu vyrazhe- niyu. (1,$)w imya_fajla Komanda zapisi zapisyvaet adresuemye stroki v ukazannyj fajl. Esli fajl ne sushchestvuet, on soz- daetsya. Imya fajla zapominaetsya, esli eshche ne bylo zapomnennogo imeni. Esli imya fajla ne zadaetsya, ispol'zuetsya zapomnennoe imya fajla, esli ono imeetsya (sm. komandy "e" i "f"). Polozhenie "." ne izmenyaetsya. Esli dannaya komanda vypolnilas' uspeshno, pechataetsya kolichestvo zapisannyh simvo- lov. 145 APK 00210-01 33 01-4 (1,$)W imya_fajla |ta komanda analogichna komande "w", za isklyuche- niem togo, chto adresuemye stroki dobavlyayutsya k fajlu. (1,$)WQ imya_fajla |ta komanda analogichna komande "w", za isklyuche- niem togo, chto zatem vypolnyaetsya komanda "q", osushchestvlyayushchaya vyhod iz redaktora posle zapisi fajla. x Iz standartnogo vvoda zaprashivaetsya stroka s klyuchom. Vposledstvii komandy "r", "e" i "w" budut zashifrovyvat' i rasshifrovyvat' tekst s po- moshch'yu algoritma "crypt", ispol'zuya etot klyuch. Pustoj klyuch otmenyaet rezhim shifracii. (.+1)z ili (.+1)zn |ta komanda ispol'zuetsya dlya prosmotra bufera, nachinaya s ishodnoj stroki. Raspechatyvaetsya 22 (ili "n", esli ukazano) stroki. Poslednyaya nape- chatannaya stroka stanovitsya tekushchej strokoj. Zna- chenie "n" zapominaetsya, t.e. ono stanovitsya standartnym dlya posleduyushchih komand "z". ($)= Raspechatyvaetsya nomer stroki dlya adresuemoj stroki. |ta komanda ne menyaet polozheniya ".". 146 APK 00210-01 33 01-4 !<komanda yazyka upravleniya zadaniyami> CHast' stroki posle "!" peredaetsya sh dlya vypol- neniya v kachestve komandy. Polozhenie "." ne menya- etsya. (.+1,.+1) <konec stroki> Odinochnyj adres v stroke vyzyvaet raspechatku ad- resuemoj stroki. Pustaya stroka ekvivalentna ".+1r". |to polezno dlya prohoda po tekstu. Esli ukazyvaetsya dva adresa, ne razdelyaemye tochkoj s zapyatoj, redaktor ed raspechatyvaet ukazannyj di- apazon strok. Esli oni razdeleny tochkoj s zapya- toj, raspechatyvaetsya vtoraya stroka. Esli posylaetsya signal preryvaniya, redaktor ed pechata- et "?interrupted" ("?prervan") i vozvrashchaetsya v ko- mandnyj rezhim. Nekotorye razmernye ogranicheniya: 512 simvolov v stro- ke, 256 simvolov v spiske komand dlya komandy "g", 64 simvola v imeni fajla. Predel kolichestva strok zavisit ot razmera operativnoj pamyati: kazhdaya stroka zanimaet 2 slova. Pri chtenii fajla ed otbrasyvaet simvoly nul koda KOI-8 i vse simvoly posle poslednego simvola novoj stroki. FAJLY: /tmp/e* edhup 147 APK 00210-01 33 01-4 Pri zavisanii terminala zdes' sohranyaetsya protokol vy- polnennoj raboty. DOPOLNITELXNYE SSYLKI: sed, crypt DIAGNOSTIKA: "?name" dlya nedostupnogo fajla. "?" pri prochih oshibkah. Dlya predotvrashcheniya poteri cennoj informacii komandy "q" i "e" schitayutsya oshibochnymi, esli posle poslednej modifikacii bufera ne byla vydana komanda "w". Povtor- naya komanda "q" ili "e" vypolnyaetsya vsegda. ZAMECHANIYA: Komanda "l" nepravil'no obrabatyvaet simvol "del" ("zaboj"). Komanda annulirovaniya privodit k potere metok v vosstanovlennyh strokah. 148 APK 00210-01 33 01-4 IMYA: expand, unexpand - razvernut' (svernut') simvoly tabu- lyacii. FORMAT: expand [-tabstop] [-tab1, tab2, ..., tabN] [fajl ... ] unexpand [-a] [fajl ... ] OPISANIE: Komanda expand obrabatyvaet ukazannye fajly ili stan- dartnyj vvod i proizvodit zapis' v standartnyj vyvod, zamenyaya simvoly tabulyacii na probely. Simvoly vozvrata na shag v vyvode sohranyayutsya i umen'shayut schetchik pozi- cij dlya svyazannyh s tabulyaciej raschetov. Komanda expand polezna dlya predvaritel'noj obrabotki simvol'- nyh fajlov, soderzhashchih simvoly tabulyacii (pered sorti- rovkoj, prosmotrom opredelennyh stolbcov i t.p.). Esli zadan edinstvennyj parametr "tabstop", razmer ta- bulyacii ustanavlivaetsya ravnym "tabstop" probelam vmesto standartnogo znacheniya 8. Esli zadano neskol'ko tabulyacionnyh ostanovov, pozicii tabulyacii ustanavli- vayutsya v ukazannyh stolbcah. Komanda unexpand zamenyaet posledovatel'nosti probelov na simvoly tabulyacii, chitaya ishodnye dannye iz stan- dartnogo vvoda ili (esli zadany fajly) iz ukazannyh fajlov. Esli zadan klyuch "-a", simvoly tabulyacii vstav- lyayutsya vezde,gde eto vozmozhno. Po umolchaniyu unexpand zamenyaet na simvoly tabulyacii tol'ko pervye probely. 149 APK 00210-01 33 01-4 IMYA: expr - vychislenie parametrov kak vyrazheniya. FORMAT: expr param ... OPISANIE: Parametry rassmatrivayutsya kak vyrazhenie. Posle vychis- leniya rezul'tat zapisyvaetsya v standartnyj vyvod. Kazhdyj chlen vyrazheniya predstavlyaet soboj otdel'nyj pa- rametr. Operacii i klyuchevye slova. |tot spisok sostavlen v po- ryadke vozrastaniya starshinstva operacij.Operacii s odi- nakovym starshinstvom sgruppirovany: Vyr ! vyr Vyvodit pervoe vyrazhenie "vyr", esli ono ne pus- toe i ne ravno "0", v protivnom sluchae vyvodit vtoroe vyrazhenie; Vyr & vyr Esli ni odno iz vyrazhenij ne yavlyaetsya pustym ili "0", vyvodit pervoe vyrazhenie, v protivnom slu- chae vyvodit "0"; Vyr opotn vyr "Opotn" predstavlyaet soboj odnu iz operacij ot- nosheniya <, <=, =, !=, >=, >. Vyvodit "1", esli ukazannoe sravnenie verno, i "0", esli ono oshi- bochno. Esli oba vyrazheniya yavlyayutsya celymi, srav- 150 APK 00210-01 33 01-4 nenie yavlyaetsya chislennym, inache ono yavlyaetsya leksikograficheskim; vyr + vyr vyr - vyr Slozhenie ili vychitanie parametrov; Vyr * vyr vyr / vyr vyr % vyr Umnozhenie, delenie ili vychislenie ostatka ot de- leniya parametrov; Vyr : vyr Operaciya sravnivaet stroku, soderzhashchuyusya v pervom parametre, s regulyarnym vyrazheniem, so- derzhashchimsya vo vtorom parametre. Sintaksis regu- lyarnogo vyrazheniya takoj zhe, kak v redaktore ed. Simvoly shablona .) mogut ispol'zovat'sya dlya vy- bora chasti pervogo parametra. V ostal'nyh slucha- yah vyvoditsya kolichestvo simvolov, sootvetstvu- yushchih shablonu ("0", esli sravnenie neudachno); ( Vyr ) Skobki dlya gruppirovki. PRIMERY: Uvelichenie na "1" peremennoj A yazyka upravleniya zada- niyami: 151 APK 00210-01 33 01-4 A=`expr $A + 1` Nahozhdeniya chasti imeni fajla (mladshej chasti) iz polno- go imeni fajla, hranyashchegosya v peremennoj A, kotoraya mozhet soderzhat' ili ne soderzhat' "/": expr $A : '.*/)' '|' $A V poslednem primere sdleduet obratit' vnimanie na to, chto operacii komandy expr, sovpadayushchie s metasivolami yazyka upravleniya zadaniyami, vzyaty v apostrofy. DOPOLNITELXNYE SSYLKI: ed, sh, test DIAGNOSTIKA: Komanda expr vozvrashchaet sleduyushchie vyhodnye kody: 0 - esli vyrazhenie ne pustoe i ne ravno "0"; 1 - esli vyrazhenie pustoe ili "0"; 2 - dlya nevernyh vyrazhenij. 152 APK 00210-01 33 01-4 IMYA: f77 - kompilyator s yazyka FORTRAN-77. FORMAT: f77 [klyuch] ... Fajl ... OPISANIE: Komanda f77 predstavlyaet soboj kompilyator s yazyka FORTRAN-77. Raspoznayutsya parametry sleduyushchih tipov: - Parametry, imena kotoryh zakanchivayutsya na ".f", schitayutsya ishodnymi programmami na yazyke FORTRAN-77.Oni kompiliruyutsya, i kazhdaya ob'ektnaya programma pomeshchaetsya v fajl tekushchego spravochnika pod imenem, kotoroe poluchaetsya iz imeni ishodno- go fajla putem zameny ".f" na ".o"; - Parametry, imena kotoryh zakanchivayutsya na ".r" ili ".e", schitayutsya ishodnymi programmami na yazykah RATFOR ili EFL sootvetstvenno.Oni sperva preobrazuyutsya sootvetstvuyushchim preprocessorom, a zatem kompiliruyutsya s pomoshch'yu f77; - Analogichno, parametry, imena kotoryh zakanchiva- yutsya na ".c" ili ".s", schitayutsya ishodnymi prog- rammami na yazyke Si ili assemblere.Oni kompili- ruyutsya ili assembliruyutsya, sozdavaya fajly ".o". Privedennye klyuchi imeyut to zhe samoe znachenie, chto i v komande cc. Opisanie klyuchej, zadayushchih rezhimy zagruzki soderzhitsya v ld: 153 APK 00210-01 33 01-4 -c Podavlyaet zagruzku i sozdaet fajl ".o" dlya kazh- dogo ishodnogo fajla; -d Kompilyator formiruet dopolnitel'nye komandy i informaciyu v ob'ektnom fajle dlya simvol'nogo ot- ladchika cdebug. -p Podgotovit' ob'ektnye fajly dlya profilirovaniya (sm. komandu prof); -O Vyzvat' optimizator ob'ektnogo koda; -S Skompilirovat' ukazannye programmy i ostavit' assemblernyj vyhod v sootvetstvuyushchih fajlah s suffiksami ".s". (fajly ".o" ne sozdayutsya); -f Ispol'zovat' interpretator plavayushchej zapyatoj, krome togo, podklyuchaetsya variant kompilyatora, kotoryj mozhet rabotat' na mashinah bez processora plavayushchej zapyatoj. -o vyvod Prisvaivaet vyhodnomu fajlu redaktora svyazej ld imya "vyvod" vmesto "a.out"; Sleduyushchie klyuchi yavlyayutsya specificheskimi dlya f77: -onetrip Kompiliruet cikly do, kotorye, poluchiv upravle- nie, vypolnyayutsya po krajnej mere odin raz. (V FORTRANe-77 cikly do voobshche ne vypolnyayutsya, esli verhnyaya granica men'she, chem nizhnyaya); 154 APK 00210-01 33 01-4 -u Ustanavlivaet tip neopredelennyh peremennyh "undefined" vmesto ispol'zovaniya standartnyh pravil yazyka FORTRAN; -w Podavlyaet vse predupreditel'nye soobshcheniya. Esli etot klyuch imeet vid "-w66", podavlyayutsya tol'ko predupreditel'nye soobshcheniya otnositel'no sovmes- timosti s yazykom FORTRAN-66. Klyuch "-wki" podav- lyaet predupreditel'nye soobshcheniya o russkih bukvah v identifikatorah; -U Po umolchaniyu propisnye bukvy v identifikatorah i v klyuchevyh slovah perevodyatsya v strochnye. Klyuch "-U" blokiruet perevod, chto pozvolyaet razlichat' propisnye i strochnye bukvy v identifikatorah. Klyuchevye slova v etom sluchae zapisyvayutsya pro- pisnymi bukvami; -O<cifra> Razreshit' vynesenie peremennyh ciklov na re- gistry s cel'yu optimizacii. Odnovremenno vklyucha- etsya rezhim "-O". <cifra> opredelyaet chislo re- gistrov: 1 ili 2; -I2 -I4 -Is Flagi vliyayut na razmer celyh peremennyh: flag "-I2" ustanavlivaet tip "integer" ekvivalentnym "integer*2", "-I4" - "integer*4". Po umolchaniyu ustanovlen rezhim "-I4" (v sootvetstvii so stan- dartom peremennye tipov "integer" i "real" 155 APK 00210-01 33 01-4 dolzhny zanimat' odinakovuyu pamyat'). Rezhim "-Is" razreshaet kompilyatoru v rezhime "-I4" vychislyat' indeksy v predpolozhenii, chto oni nahodyatsya v di- apazone chisel tipa "integer*2"; -v V etom rezhime kompilyator soobshaet ob nachale oche- rednyh etapov translyacii(F77PASS, PASS1, AS, LD, C), a takzhe vydaet versiyu kompilyatora; -V Otladochnyj rezhim raboty kompilyatora. Raspechaty- vayutsya komandy "shell", zapuskaemye v processe translyacii vmeste so svoimi parametrami; -T<simvol><imya-komponenty> Zamenit' kakoj to prohod kompilyatora na ukazan- nuyu programmu. Sluzhit dlya otladki kompilyatora ili vyzova drugih ego versij. <simvol> oboznacha- et sleduyushchie komponenty translyatora: "0" - f77 prohod 0; "1" - f77 prohod 1; "2" - c1 (si-kompilyator, prohod 1); "o" - c2 (optimizator koda); "a" - as (assembler); "l" - ld (redaktora svyazej); "f" - golovnoj razdel (vmesto /lib/crt0); "m" - makroprocessor m4. Sleduet imet' v vidu, chto flag "-f" perenaznacha- et komponenty "1" i "f". 156 APK 00210-01 33 01-4 -F Obrabotat' sootvetstvuyushchie fajly preprocessorami RATFOR i EFL, pomestit' rezul'tat v fajl s suf- fiksom ".f", no ne kompilirovat' rezul'tat; -m Primenit' k kazhdomu fajlu ".r" ili ".e" preprocessor m4 pered obrabotkoj ego preproces- sorami RATFOR i EFL; -ex Ispol'zovat' stroku "x" kak klyuch dlya EFL pri ob-