- •План лабораторних робіт
- •Лабораторна робота № 1
- •Лабораторна робота № 2
- •Лабораторна робота №3
- •Norton commander: панелі і функціональні клавіші Утримання панелей Norton Commander
- •Головне меню
- •Лабораторна робота № 4
- •Вивести на екран дерево каталогів на диску і відшукати там свої каталоги.
- •Можливості Norton Commander
- •Лабораторна робота № 5
- •Лабораторна робота № 6
- •Лабораторна робота № 7
- •Лабораторна робота № 8
- •Лабораторна робота № 9
- •Лабораторна робота № 10
Лабораторна робота № 8
Тема: Обробка даних в UNIX. Pедактор ed.
Мета: Навчитися працювати із стандартними засобами обробки даних в Unix. Освоїти редактор ed.
Завдання:
За допомогою автоматичної служби нагадування виконайте запис розкладу здачі іспитів зимової сесії групою.
Передайте цю інформацію всім користувачам вашої OS UNIX.
За допомогою редактора ed створити текстовий файл з даними.
Вивести зміст файлу на екран.
Виконати вставку, копіювання, переміщення, видалення тексту.
Знайти в тексті задану викладачем послідовність символів, та замінити її на іншу.
Виконати об’єднання та розбивання файлів за допомогою даного редактора.
Створити командний файл редактором ed.
Обладнання та матеріали: ПК, ОС LINIX, методичні вказівки до лабораторних робіт.
Хід роботи:
Ознайомитись з теоретичними відомостями.
Запустити в операційнії системі UNIX редактор ed.
За допомогою автоматичної служби нагадування виконати запис, відповідно до завдання та розіслати його всім користувачам операційної системи.
За допомогою редактора ed створити файл.
Зі створеним раніше файлом провести дії по редагуванню тексту, відповідно до завдання.
З цим же файлом провести дії по заміні та пошуку символьної інформації в файлі, відповідно до завдання.
Виконати об’єднання та розбивання файлів.
Створити командний файл.
Оформити та захистити звіт лабораторної роботи.
Теоретичні відомості
Автоматична служба нагадування та шифрування
Команда calendar проглядає файл calendar в поточному каталозі і видає на стандартне виведення рядка, містячі (у довільному місці) сьогоднішню або завтрашню дату. Розпізнаються більшість форм завдання дати, наприклад, "Aug. 17", "august 17", "8/17" і т.д., але не "17 August" або "17/8". Перед вихідними днями "завтра" означає дні аж до понеділка включно.Якщо заданий необов'язковий аргумент, команда calendar шукає файли з ім'ям calendar у всіх вхідних каталогах користувачів і посилає знайдені рядки користувачам через поштовий зв'язок mail(1). Звичайно ця операція робиться щодня, завдяки можливостям операційної системи UNIX.
За допомогою автоматичної служби нагадування виконати запис важливих наступних подій:
вивести календар вказаного місяця;
створити текстовий файл, який зберігає секретну інформацію. Зашифрувати цей файл;
передати окремо зашифрований файл та ключ іншому користувачу;
виконати прийом розшифрованого файлу, та виконати порівняння отриманої та переданої інформації.
cal 10 2010 #виведення календаря 10 місяця 2010 року
enigma < source.txt > ecrypt.crt #перший спосіб шифрування
bdes < source.txt > bcrypt.crt #другий спосіб шифрування
crypt < source.txt > ccrypt.crt #третій спосіб шифрування
Розшифрування виконується аналогічним чином, але з використанням ключів, введених при шифруванні
diff source.txt decrypt.txt #порівняння файлів
Команди редактора ed
Виклик редактору виконується:
ed aaa.txt (натиск клав. введення) --- вхід в даний редактора
Для запису у файл потрібно спочатку ввійти в редактора поставити а ту ввести потрібну інформацію, перед виходом обов’язково треба інформацію зберегти
w aaa.txt (натиск клав. введенню)
В загальному випадку команди редактора ed складаються з імені команди, якому можуть передувати один або два номери рядків, і після якого для команд "е", "r" і "w" може указуватися ім'я файлу. В рядку може бути присутній тільки одна команда, проте команда "р" може слідувати після будь-якої іншої команди, окрім "е", "r", "w" і "q".
а - Дописати рядки в буфер редактора після поточного рядка (якщо не заданий інший рядок). Дозапис продовжується до тих пір, поки не буде введена команда ".<CR>". Поточним стає останній дописаний рядок. В цій команді допускається адреса "О", при цьому текст поміщається в початок буфера.
с - Замінити вказані рядки новим текстом, наступним після команди "с". Введення нових рядків завершується ".<CR>". Якщо номери рядків в команді не вказані, замінюється поточний рядок. Поточним стає останній замінений рядок або (якщо рядків заміни не було) рядок, передуючий видаленим рядкам.
d - Видалити вказані рядки. Якщо номери рядків не задані, віддаляється поточний рядок. Поточним стає перший невидалений рядок, крім випадку, коли віддаляється останній рядок буфера. В цьому випадку поточним стає новий останній рядок буфера.
е - Редагування нового файлу. Попередній вміст буфера втрачається, так що заздалегідь корисно ввести команду "w". Поточним стає останній рядок буфера.
Е - Команда виконує ті ж дії, що і "е", за винятком того, що не видається повідомлення, якщо після останньої зміни буфера не була видана команда запису "w".
f - Видати поточне ім'я файлу. Якщо після команди "г" указується ім'я файлу, поточне ім'я файлу буде замінено цим ім'ям.
g - Конструкція "g/re/команди" виконує вказані "команди" над тими рядками, які відповідають зразку "re".
i - Вставити рядки перед вказаним рядком (або рядком, визначуваною крапкою). Вставка завершується командою ".<CR>". Поточним стає останній вставлений рядок.
j - Об'єднати вказані рядки в один рядок. Якщо рядки не вказані, об'єднуються поточний і наступний за нею рядки.
до - Відзначити рядок (вказану або поточну) маркером, задається після "k". Як маркер використовуються рядкові латинські букви.
l - Роздрукувати рядки. Команда "l" еквівалентна команді "р", проте вона роздруковує символи, що графічно не відображаються, і "згортає довгі рядки".
m - Помістити вказані рядки після рядка, що задається після "т". Поточним стає останній переміщений рядок.
р - Видати вказані рядки. Якщо рядки не вказані, роздруковується поточний рядок. Окремий номер рядка еквівалентний команді" (номер_рядка)р". Просте натиснення клавіші <CR> роздруковує наступний рядок.
q - Вихід з редактора. Якщо при цій операції втрачається інформація (наприклад, копія початкового файлу змінювалася, але не була видана команда запису "w"), після першої команди "q" видається підказка "?" і ніяких дій не проводиться. Видача підряд двох команд "q" без попередньої команди "w" приводить до стирання буфера і закінчення роботи з редактором.
Q - Працює так, як команда "q" за винятком того, що вихід проводиться негайно (без якої-небудь діагностики про можливу втрату інформації).
r- Прочитати файл в буфер (в кінець буфера, якщо не вказано по-іншому). Поточним стає останній лічений рядок.
s - Команда s/xxx/yyy/ підставляє замість символів "ххх символи" "ууу" у вказаних рядках. Якщо рядки не вказані, підстановка виконується в поточному рядку. Поточним стає останній рядок, в якому відбулася підстановка, це приводить до збереження початкового положення, якщо не була виконана жодна підстановка. Команда "s" замінює тільки перше входження "ххх" в рядку. Для заміни всіх входжень після завершальної дробової межі указується символ "g".
t - Скопіювати вказані рядки після рядка, що задається після "t". Поточним стає останній скопійований рядок.
u - Анулювати зміну, виконану попередньою командою.
v - Конструкція "v/re/команди" виконує вказані "команди" над тими рядками, які не відповідають зразку "re".
w - Записати буфер у файл. Значення покажчика поточного рядка не змінюється.
W - Аналогічна команді "w", за винятком того, що вказані рядки дописуються до файлу.
х - Робота в режимі шифрування. Запрошується ключ, використовуючи який подальші команди "г", "е" і "w" зашифровуватимуть і розшифровуватимуть текст. Порожній ключ відміняє режим шифрування.
.= - Видати поточний номер рядка (один символ "=" друкує номер останнього рядка).
! - Конструкція "!командний_рядок" викликає виконання "командного_рядка інтерпретатором" команд.
/re/ - Контекстний пошук. Пошук наступного рядка, який містить дану послідовність символів, і її видача. Поточним стає рядок, відповідний заданому зразку "re". Пошук починається з рядка ".+1" до "$", після останнього рядка переходить до рядка 1 і, при необхідності, триває до поточного рядка.
?re? - Контекстний пошук у зворотному напрямі. Пошук починається з рядка 1 і триває до останнього рядка.
.(крапка) - Позначення поточного рядка.
$ - Позначення останнього рядка.
'х' - Позначення рядка, раніше відзначеної маркером "х".
Об'єднання файлів
Припустимо, що у файлі "filel" зразу ж після слів "текст..." вимагається вставити "file2".
Для цього необхідно викликати редактора для фала "filel", знайти символи "текст..." і додати в це місце файл "file2":
ed filel
/текст.../
текст... (відповідь редактора)
.r file2
Команда "r" без адрес додає читані рядки в кінець, тобто працює аналогічно "$г".
Розбиття файлу
Припустимо, що потрібно виділити в окремий файл деяку таблицю, щоб її можна було окремо форматувати і перевіряти.
.TS
... (вміст)
.ТЕ
Для виділення цієї таблиці в окремий файл з ім'ям "table" в першу чергу потрібно знайти початок цієї таблиці (рядок "TS"), а потім записати відповідний фрагмент у файл:
/^\.TS
.TS (редактор друкує знайдений рядок)
.,/^\.TE/w table
В результаті цього поставлена мета буде досягнута. Можна виконати все це і в одній команді:
/^\.TS/;/^\.TE/w table
Річ у тому, що команда "w" може виконувати запис не всього файлу, а деякої групи рядків. При бажанні можна записати навіть один рядок, для цього треба задати один номер рядка замість двох.
Копіювання рядків тексту (t)
Команда копіювання "t" аналогічна команді "т", за винятком того, що блок тексту не віддаляється, а копія цього блоку поміщається після вказаного рядка тексту.
Формат команди:
[n[, k]]tl<CR>
де n, k - номери початкового і кінцевого копійованих рядків; якщо вказане тільки n, то копіюється один рядок з номером n; якщо номер рядка не вказаний, то копіюється поточний рядок;
t - команда копіювання;
l - номер рядка, після якого треба помістити рядки з номерами від "n" до "k" включно.
Командні файли редактора
Якщо достатньо складний набір операцій редагування повинен бути виконаний над багатьма файлами, це простіше всього зробити шляхом створення командного файлу редактора, що містить потрібні операції, і подальшого застосування цього командного файлу по черзі до всіх файлів.
Припустимо, наприклад, що потрібно замінити кожне слово "версія1" на "версiя2" і кожне слово "1985" на "1986" у великій кількості файлів. Помістимо у файл "list" наступний рядки:
g/версія 1 /s//версія2/g
g/1985/s//1986/g
w
q
після цього можна скористатися командами:
ed filel < list
ed file2 < list
Це приведе до тому, що редактор ed одержуватиме команди з раніше приготованого файлу. В цьому випадку вся робота повинна плануватися наперед.
За допомогою інтерпретатора команд системи можна більш менш легко проглянути набір файлів циклічно.
Перегляд файлу
Редактор запам'ятовує останній рядок, з яким проводилися які-небудь дії, так що вона може використовуватися без явної вказівки номера рядка. Посилання на цей рядок проводиться з допомогою
символу".".
Крапка позначає номер поточного рядка. Її можна використовувати різними способами. Зокрема, можна ввести:
. $р
це приведе до роздрукування всіх рядків від поточного рядка до кінця буфера включно.
Крапка найбільш корисна при використовуванні в комбінаціях наступного вигляду:
.+1 (або, те ж саме.+lp)
це означає "надрукувати наступний рядок" і є зручним способом повільного перегляду буфера. Можна також ввести команду:
.-1 (або.-lp)
що означає "роздрукувати рядок перед поточним рядком". Це дозволяє, при бажанні, рухатися назад.
Ще однією корисною командою є команда вигляду:
.-3,.-1р
яка роздруковує три попередні рядки.
Необхідно пам'ятати про те, що обидві команди друку "р" і "1" змінюють номер поточного рядка. Можна у будь-який час взнати її значення, ввівши:
.=
редактор відповість друком значення номера поточного рядка.
Команда вставки рядків (i)
Дана команда використовується для вставки в текст рядків, що вводяться з терміналу.
Формат команди:
[n]i<CR>
де n - номер рядка в буфері редактора, перед якою треба вставити нові рядки. Якщо "n" відсутній, то рядки вставляються перед поточним рядком. Введення нових рядків з терміналу завершується символом "." в першій позиції.
Поточним рядком після виконання команди "i" стає останній вставлений рядок.
Приклад використовування команди "i" для вставки 3-х рядків перед 7-й рядком:
Приклад.
7i<CR>
рядок 1<CR>
рядок 2<CR>
рядок 3<CR>
.<CR>
Команда видалення рядків (d)
Дана команда призначена для видалення одній або групи рядків в буфері редактора.
Формат команди:
[n[, k]]d<CR>
де n, k - номери початкового і кінцевого рядків, що видаляються.
Команді "d" може передувати один або два номери рядка, гріли номер не заданий, то редактор видаляє поточний рядок.
Якщо заданий номер тільки одного рядка, то віддаляється вказана строка,' поточної стає рядок, наступний за видаленою.
Якщо задано два номери рядка, то віддаляються всі рядки у вказаному інтервалі від n до k включно.
Поточним рядком завжди стає рядок, наступний за останнім видаленим рядком, крім випадку, коли віддаляється останній рядок буфера. В цьому випадку поточним стане останній рядок буфера.
Приклад.
4 $d
видалення з буфера рядків з 4-й по останню включно. В буфері після виконання команди залишиться 3 першого рядка. Поточним рядком стане третій рядок буфера.
Команда пошуку контексту
Ця команда призначена для пошуку рядка, що містить заданий символ, групу символів або групу слів.
Конструкція /.../
Формат команди:
/текст/
де "текст" - шуканий текст.
Редактор проглядає буфер, починаючи з рядком ".+1" (тобто наступної за поточною), йде до кінця буфера, потім продовжує польок з першого рядка буфера і до поточного рядка включно. При виявленні рядка із заданим текстом редактор роздруковує її, і цей рядок стає поточним.
У разі відсутності в буфері шуканого тексту редактор повертається до поточного рядка і друкує символ "?". Приклад.
/lop/
знайти в буфері рядок, послідовність символів "lop", що містить.
Команда пошуку в комбінації з іншими командами ("a", "i", "s", "t", "m") може успішно використовуватися для вказівки необхідного рядка.
Приклади.
/lop/s//loop/p
знайти рядок, що містить слово "lop", і замінити його на "loop", потім роздрукувати цей рядок;
/текст/i
пошук рядка, що містить вказаний текст, і вставка перед знайденим рядком.
В команді "s" шуканий текст в лівій частині можна не указувати.
Конструкція ?...?
Редактор проводить пошук не тільки в прямому, але і у зворотному напрямі. Для цього в команді пошуку замість символу "/" використовується символ "?":
?текст?
Це зручно у випадку, якщо при редагуванні тексту необхідно повернутися назад.
Продовження пошуку.
Якщо при пошуку рядка з шуканим текстом виявилося, що це не той рядок, то для продовження пошуку потрібно задати команду у вигляді:
// - продовжити пошук в прямому напрямі;
?? - продовжити пошук у зворотному напрямі.
Команда заміни (s)
Команда заміни "s" призначена для зміни окремих слів або символів в межах одного рядка або групи рядків.
Загальний формат команди:
[n[, k]]s/х/у/[команда]<СК>
де х - група символів або слів в рядку, які треба замінити (старий текст);
у - група символів або слів, які замінюють старе значення, вказане як "х" (новий текст);
n, k - номери початкового і кінцевого рядків буфера, в межах яких здійснюється заміна;
/команда - одна з наступних 4-х команд:
g - замінити кожну появу групи символів (х) в кожному вказаному рядку;
l - відобразити останній рядок заміненого тексту, включаючи недруковані символи;
n - відобразити останній рядок заміненого тексту, разом з номерами рядків;
р - відобразити останній рядок заміненого тексту.
Якщо номери рядків не вказані, заміна здійснюється в поточному рядку. Якщо вказаний номер тільки одного рядка, то заміна проводиться тільки в одному рядку.
Для реалізації заміни в групі рядків треба вказати номери початкового (n) і кінцевого (k) рядків, в межах яких треба провести заміну.
Контрольні питання:
Як працює автоматична служба нагадування та шифрування?
Як здійснюється виклик редактору ed?
Як виконується об’єднання файлів?
Як виконується розбиття файлів?
Як виконується копіювання рядків?
Що таке командні файли редактору.
Як виконується перегляд файлів.
Як виконується видалення рядків.
Як виконується пошук контексту?
Як виконується заміна?
Література:
Болл Билл Освой самостоятельно Linux за 24 часа, 2-е издание. : Пер. с англ. : Уч. пос. – М. : Издательский дом «Вильямс», 2000. – 480 с.: ил. – Парал. тит. англ., стор. 75-98.
Паркер Тим. Linux 5.2. Энциклопедия пользователя: Пер. с англ./Тим Паркер – К.: Издательство «ДиаСофт», 1999. – 688 с., стор. 110-124.
