- •Лабораторна робота 3
- •Базові регулярні вираження
- •Метасимволы, використовувані в регулярних вираженнях
- •Приклади регулярних виражень
- •Приклад виконання лабораторної роботи n3 Завдання 1
- •Завдання 2
- •Завдання 3
- •Варіанти індивідуальних завдань
- •Хід роботи
- •Вибрані команди Unix. Короткий опис:
- •Приклад виконання лабораторної роботи n4 Завдання 1
- •Завдання 1, варіант 1
- •Завдання 1, варіант 2
- •Завдання 1, варіант 3
- •Завдання 2
- •Завдання 2 варіант 1
- •Завдання 2, варіант 2
- •Завдання 2, варіант 3
- •Завдання 3
- •Завдання 3 варіант 1
- •Завдання 3 варіант 2
- •Варіанти індивідуальних завдань
- •Хід роботи
- •Команда awk :
- •Опис шаблонів
- •Приклад виконання лабораторної роботи n5 Приклад 1-1
- •Приклад 1-2
- •Приклад 1-3
- •Приклад 2-3.1
- •Приклад 2-3.2
- •Приклад 2-3.3
- •Приклад 2-3.4
- •Варіанти індивідуальних завдань
- •Команда sh:
- •Команда env:
- •Приклад виконання лабораторної роботи n6
- •Варіанти індивідуальних завдань
- •Хід роботи
- •Деякі приклади програмування
- •Приклад 2
- •Приклад 3
- •Варіанти індивідуальних завдань
Завдання 3
Джерелом вхідних даних для всіх варіантів цього завдання може бути команда печатки вмісту каталогів ls або команда пошуку файлів find. Вихідний потік першої команди направляється в конвеєр, де він може послідовно оброблятися командами обробки текстів: grep, sed, cut, sort і т.п. Якщо в завданні потрібно підрахувати число елементів, в останній ланці конвеєра може бути застосована команда wc.
При виконанні завдання слід мати у виді, що користувацькі групи в системі збігаються з кодами студентських груп (наприклад: "ap109", "ap070b" і т.д.), усе коди починаються з букв "ap"; а імена користувачів формуються як: ім'я_группыnn, де nn - порядковий номер у групі.
Завдання 3 варіант 1
Визначити загальна кількість студентських груп.
Розв'язок:
ls -ld ../* | |
Команди виконуються з домашнього каталогу користувача - /home/ім'я_користувача, а інформацію про створених для груп каталогах можна одержати з каталогу /home/, який може адресуватися з поточного каталогу як: ../. Виводимо інформацію про вміст цього каталогу. Опція -l вказується, щоб одержати повну інформацію, включаючи групу, опція -d запобігає обходу підкаталогів. Печатка команди ls перенаправляється в потік. |
grep "d.\{24\}ap" | |
Ознака підкаталогу - буква "-d" у першій позиції видачі команди ls, а імена груп починаються c 25-й позиції видачі. Команді grep задається шаблон, який визначає ознака каталогу в 1-й позиції й ім'я групи, що починається з букв "ap". |
sed -n 's/[ ]\{2,\}/ /gp' | |
Оскільки далі буде потрібно виділяти поля, позбудемося множинних пробілів за допомогою команди sed. |
cut -f4 -d ' ' | |
Виділяється 4-е поле, що містить ім'я групи. |
sort | |
Результат сортується, це знадобиться для наступної команди. Оскільки зараз у тексті залишився тільки один стовпець, ніяких опцій для сортування ми не вказуємо. |
uniq | |
Та сама група повторюється для багатьох каталогів, тому слід позбутися від повторюваних рядків. |
wc -l |
Команда wc підраховує число рядків, що залишилися, результат виводиться на печатку. |
Протокол виконання:
Script started on Thu Sep 5 08:20:56 2002 bash2-2.05$ ls -lad ../* | grep "d.\{24\}ap" | sed -n 's/[ ]\{2,\}/ /gp' | cut -f4 -d ' ' | > sort +0 -1 | uniq | wc -l 7 bash2-2.05$ Script done on Thu Sep 5 08:21:03 2002 |
Завдання 3 варіант 2
Визначити файли в каталозі /etc, які є символічними посиланнями. Вивести імена файлів і імена тих файлів, на які вони посилаються, упорядкувавши список по першому імені.
Розв'язок:
ls -ld /etc/* | |
Виводиться інформація про вміст каталогу, що цікавить нас. Печатка команди ls перенаправляється в потік. |
grep "[l]" | |
Виділяються ті рядки, які мають в 1-й позиції букву "l" - ознака м'якого посилання. |
sort +8 -9 | |
Виконується сортування по 9-му стовпцю - імені файлу |
sed -n 's/[ ]\{2,\}/ /gp' | |
Множинні пробіли заміняються одним пробілом. |
cut -f9-100 -d' ' |
Виділяються поля, починаючи з 9-го - і до кінця. |
Протокол виконання:
Script started on Thu Sep 5 08:21:44 2002 bash2-2.05$ ls -ld /etc/* | grep "[l]" | sort +8 -9 | sed -n 's/[ ]\{2,\}/ /gp' | cut -f9-100 -d' ' /etc/grub.conf -> ../boot/grub/grub.conf /etc/init.d -> rc.d/init.d /etc/rc -> rc.d/rc /etc/rc0.d -> rc.d/rc0.d /etc/rc1.d -> rc.d/rc1.d /etc/rc2.d -> rc.d/rc2.d /etc/rc3.d -> rc.d/rc3.d /etc/rc4.d -> rc.d/rc4.d /etc/rc5.d -> rc.d/rc5.d /etc/rc6.d -> rc.d/rc6.d /etc/rc.local -> rc.d/rc.local /etc/rc.sysinit -> rc.d/rc.sysinit /etc/rmt -> ../sbin/rmt bash2-2.05$ Script done on Thu Sep 5 08:21:51 2002 |