Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы (2 семестр).docx
Скачиваний:
3
Добавлен:
12.11.2019
Размер:
193.38 Кб
Скачать

Вибрані команди Unix. Короткий опис:

Інформаційні команди: info, man.

Введення й редагування текстів: tee, ed, sed, vi

Вивід текстів: cat, more, pr, pg

Команди файлової системи: cd, chgrp, chmod, chown, cp, file, find, ln, ls, mkdir, mv, pwd, rm, rmdir

Обробка [текстових] файлів: awk, cmp, comm, cut, diff, diff3, grep, head, join, paste, sort, split, tali, uniq, wc

Пошта, процеси, час, etc.: cal, date, echo, env, export, kill, mail, mesg, nice, ps, script, sh, who, write

Команди інтерпретатора shell: basename, expr, read, shift, test

Приклад виконання лабораторної роботи n4 Завдання 1

Робота всіх варіантів демонструється на обробці файлу з іменем Hum-Dum.txt, вихідний уміст якого показано в наступному протоколі:

Script started on Thu Sep 5 07:56:10 2002

bash2-2.05$ cat Hum-Dum

Humpty-Dumpty

Set on the wall.

Humpty-Dumpty

Had a greate fall.

And all the king's horses,

And all the king's man.

Can not Humpty,

Can not Dumpty,

Humpty-Dumpty,

Dumpty-Humpty,

Set on this wall

Again.

bash2-2.05$

Script done on Thu Sep 5 07:56:21 2002

Нижче приводяться деякі загальні міркування за рішенням завдань 1-го завдання.

У більшості випадків ми можемо легко сформулювати оператори потокового редактора, необхідні для виконання заданого перетворення, за винятком одного компонента - адреси рядка, до якого це перетворення повинне бути застосоване. У деяких випадках нам також заздалегідь невідомий і текст, який необхідно вставити в цільовий рядок. Тому типова схема розв'язку наступна:

  1. Визначаються номери рядків, до яких повинні бути застосовані перетворення, а при необхідності - також і текст, який повинен вставлятися в цільовий файл. Для визначення застосовуються статичні (заздалегідь відомі й закладені в текст команд) команди потокового редактора. Результати цього кроку зберігаються у файлі.

  2. Шляхом редагування результатів 1-го кроку динамічно формуються команди sed для виконання перетворення тексти, що містять адреси й, певні на 1-м кроці. Ці команди зберігаються у файлі.

  3. Виконується редагування вихідного тексту командами, збереженими на 2-м кроці.

Можливі два підходи до одержання номерів рядків, що підлягають перетворенню:

  • виконати нумерування всіх рядків вихідного файлу (це можна зробити командою pr або командою cat з опцією -n), а потім із пронумерованої послідовності рядків вибрати рядок, призначену для обробки з її номером; таке приймання застосоване в розв'язках для варіантів 1 і 2;

  • вибрати номер рядка, призначеної для обробки, за допомогою команди sed "="; таке приймання застосовано для варіанта 3.

Оскільки Unix має велика кількість утиліт для обробки текстів, причому функції багатьох утиліт перекриваються, кожна із запропонованих завдань може бути вирішена безліччю різних способів.

Завдання 1, варіант 1

Кожне друге слово кожного рядка вивести в окремий наступний рядок. Якщо в рядку тільки одне слово, нічого не робити.

Розв'язок:

pr -n' ' -T Hum-Dum.txt |  

Вивести файл без заголовка й зайвих рядків, але з номерами рядків.

sed -n 's/ *//p' |  

Вилучити головні пробіли.

cut -f1,3 -d' ' |  

Вирізати номер і 2-е слово.

sed -n '/[0-9]/p' >temp01  

Вилучити рядка, що містять тільки номер, результат зберегти в 1-м тимчасовому файлі.

cut -f1 -d' ' temp01 |  

Вибрати з 1-го тимчасового файлу номера рядків.

sed -n 's/$/a\\/p' >temp02  

Додати до них 'a\' і зберегти в 2-м тимчасовому файлі.

cut -f2 -d' ' temp01 >temp03  

Вибрати з 1-го тимчасового файлу слова й зберегти в 3-м тимчасовому файлі.

paste -d'\n' temp02 temp03 >temp01  

Зкріпити построково 2-й і 3-й тимчасові файли, вставивши між рядками, що зчіплюються, переклад рядка. Результат зберегти в 1-м тимчасовому файлі. Результат - набір команд sed на вставку.

sed -f temp01 Hum-Dum.txt >result  

Виконати команди з 1-го тимчасового файлу, зберегти результат.

rm -f temp*  

Вилучити тимчасові файли.

Протокол виконання:

Script started on Thu Sep 5 08:00:29 2002

bash2-2.05$ pr -n' ' -T Hum-Dum.txt |

> sed -n 's/ *//p' |

> cut -f1,3 -d' ' |

> sed -n '/[0-9]/p' >temp01

bash2-2.05$ cut -f1 -d' ' temp01 |

> sed -n 's/$/a\\/p' >temp02

bash2-2.05$ cut -f2 -d' ' temp01 >temp03

bash2-2.05$ paste -d'\n' temp02 temp03 >temp01

bash2-2.05$ sed -f temp01 Hum-Dum.txt >result

bash2-2.05$ rm -f temp*

bash2-2.05$ cat result

Humpty-Dumpty

Set on the wall.

on

Humpty-Dumpty

Had a greate fall.

a

And all the king's horses,

all

And all the king's man.

all

Can not Humpty,

not

Can not Dumpty,

not

Humpty-Dumpty,

Dumpty-Humpty,

Set on this wall

on

Again.

bash2-2.05$

Script done on Thu Sep 5 08:00:47 2002

Зверніть увагу на те, що у вищенаведеному протоколі деякі запрошення системи виглядають як "$", а деякі - як ">". Система друкує запрошення ">" (вторинне запрошення), якщо попередня команда закінчується ознакою конвеєра "|" і, отже, обов'язково очікується введення наступної команди. А якщо ні, то друкується первинне запрошення - "$". Символи первинного й вторинного запрошення визначаються змінними оточення PS1 і PS2 відповідно.