
- •7.080403 – Програмне забезпечення автоматизованих систем
- •1 Структура файлової системи, базовий та розгорнутий перелік команд ос unix
- •1.2 Підготовка до роботи
- •1.3 Методичні вказівки до виконання роботи
- •1.3.1 Процедура віддаленої реєстрації користувача на платформі unix
- •1.3.2 Файлова система
- •1.3.3 Середовище виконання процесів
- •1.3.4 Базові команди системи
- •1.4 Порядок виконання роботи
- •1.5 Завдання
- •1.7 Контрольні запитання
- •2 Редактор VI
- •2.3.3 Команди руху маркера по екрану монітора
- •2.3.4 Команди редактора, що забезпечують перехід у режим вводу
- •2.3.6 Команди копіювання
- •2.3.7 Команди пошуку вказаної символьної конструкції або літери
- •2.4 Порядок виконання роботи
- •2.5 Завдання
- •2.7 Контрольні запитання
- •3 Shell. Змінні оболонки shell. Застосування файла .Profile
- •3.3.2 Команда echo
- •3.3.3 Змінні середовища виконання
- •3.3.4 Файл .Profile
- •3.3.5 Використання лапок
- •3.3.6.1 Позиційні змінні (параметри)
- •3.3.6.2 Літерно-цифрові змінні (користувача)
- •3.3.6.3 Раніше визначені спеціальні змінні
- •3.3.7 Переадресація вводу-виводу за допомогою дескрипторів файлів
- •3.3.8 Шаблони, підстановки
- •3.3.9 Спеціальні символи shell операторів
- •3.4 Порядок виконання роботи
- •3.5 Завдання
- •3.7 Контрольні запитання
- •4 Shell. Оператори облонки shell. Програмування в оболонці shell
- •4.1 Мета роботи
- •4.2 Підготовка до роботи
- •4.3 Методичні вказівки до виконання роботи
- •4.3.1 Оператори мови shell
- •4.3.2 Синтаксис shell
- •If список команд
- •4.3.3 Створення та організація процедури у shell
- •4.3.4 Команди підтримки та їх особливості
- •4.3.4.1 Умовна перевірка: test
- •4.3.4.2 Оцінка арифметичних виразів expr
- •4.3.4.3 Команди true і false
- •4.3.4.4 Внутрішньорядкове введення документів
- •4.3.5 Передача параметрів до процедури shell
- •4.3.6 Приклади використання команд shell
- •4.3.6.1 Використання оператора if
- •If список команд
- •If список команд
- •4.3.6.2 Використання оператора case
- •4.3.6.3 Умовні цикли while та until
- •4.3.6.4 Організація циклу для списку: for
- •4.3.6.5 Керування циклами: break та continue
- •4.3.6.6 Кінець файла та вихід
- •4.4 Порядок виконання роботи
- •4.5 Завдання
- •4.7 Контрольні запитання
- •5 Мережні протоколи tcp/ip. Протокол telnet та протокол обміну файлами ftp
- •5.3.1.1 Командний режим telnet
- •5.4 Порядок виконання роботи
- •5.5 Завдання
- •6 Awk. Програмування на мові awk
- •6.3.1 Структура програми на мові awk
- •6.3.2 Поля
- •6.3.3 Вивід на друк
- •6.3.4 Форматований висновок
- •6.3.5 Прості шаблони
- •6.3.5 Вбудовані змінні
- •6.3.6 Змінним, обумовленим користувачем
- •6.3.7 Повідомлення про помилки
- •6.3.8 Вираження
- •6.3.8.2 Відносні вираження
- •6.3.8.3 Регулярні вираження
- •6.3.8.5 Символи
- •6.3.8.6 Комбінації виражень
- •6.3.8.6 Діапазони виражень
- •6.3.8.9 Вбудовані змінні
- •6.3.8.10 Арифметичні дії
- •6.3.8.11 Змінні поля
- •6.3.8.12 Деякі лексичні угоди
- •6.3.8.13 Вивід у файли
- •6.3.8.14 Вивід у канали
- •6.4 Порядок виконання роботи
- •6.5 Завдання
- •6.7 Контрольні запитання
- •Перелік рекомендованої літератури
6.3.8.3 Регулярні вираження
У мові awk є могутніші засоби пошуку символьних рядків, ніж оператори порівняння. Мова йде про регулярні вираження, найпростіша форма яких має вигляд рядка символів, укладених у середину кількох похилих рисок:
/Asia/
Така програма виведе список всіх вхідних рядків, що містять підрядок "Asia".
Для того, щоб установити відповідність із певним полем, використовуються оператори ~ (відповідає) і !~ (не відповідає). Програма
$4 ~ /Asia/ { print $1 }
виводить перше поле кожного запису, четверте поле якої містить значення "Asia".
6.3.8.5 Символи
\ ^ $ . [] * + ? () |
у регулярних вираженнях є метасимволами, що мають спеціальне значення. Так, метасимволи ^ і $ позначають початок і кінець рядка, відповідно, а метасимволом "." (крапка) позначається будь-який одиночний символ. Таким чином, рядок
/^.$/
позначає всі записи, що складаються рівно з одного символу.
Група символів, укладена у квадратні дужки, відповідає кожному із цих символів; наприклад, вираження /[ABC]/ означає вибірку записів, що містять у будь-якому місці хоча б один із символів "A", "B", "C". У квадратні дужки можна містити діапазони букв або цифр: рядку /a-zA-Z/ відповідає будь-яка поодинока буква.
Якщо після лівої дужки є символ "^", що означає доповнення до класу значень, вираження відповідає будь-якому символу, відсутньому в зазначеній послідовності: /[^a-zA-Z]/ відповідає будь-якому символу, крім букв. Програма
$2 !~ /^[0-9]+$/
виводить всі записи, у яких друге поле не є набором цифр (^ означає початок рядка, [0-9]+ означає одну й більше цифр, а $ - кінець рядка). Програми такого типу часто використовуються для перевірки правильності даних.
Круглі дужки означають угруповання, а символ | – можливість вибору. Програма
/(apple|cherry) (pie|tart)/
вибирає рядки, що містять хоча б одну з таких підрядків: "apple pie", "apple tart", "cherry pie" або "cherry tart".
Для того, щоб скасувати спеціальне значення метасимволу, необхідно поставити перед ним символ \ (зворотна похила риска). Таким чином, програма
/b\$/
виводить всі рядки, що містять кілька символів "b$".
Крім метасимволів команда awk розпізнає dсередині регулярних виражень і рядків такі esc-послідовності, прийняті в мові Сі:
\b повернення на один символ
\f прогін до кінця аркуша
\n новий рядок
\r повернення каретки
\t табуляція
\ddd вісімкове значення ddd
\" лапки
\c будь-який інший символ
Для виводу всіх рядків, що містять символ табуляції, можна використати вираження
/\t/
awk інтерпретує будь-який рядок або змінну справа від ~ і !~ як регулярне вираження. Так, наприклад, програму
$2 !~ /^[0-9]+$/
можна було б записати у такому вигляді
BEGIN { digits = "^[0-9]+$" }
$2 !~ digits
Припустимо, що потрібно знайти рядок символів ^[0-9]+$. Якщо рядок у лапках, подібний "^[0-9]+$", використовується як регулярне вираження, для захисту метасимволів, що входять у нього, потрібен додатковий рівень символів "\". Один рівень знімається під час початкового синтаксичного розбору рядка. Якщо зворотна похила риска потрібна для того, щоб скасувати спеціальне значення наступні за нею символу, виникає необхідність у використанні ще однієї зворотної похилої риски, що захищає першу.
Точна форма регулярних виражень і підрядків, їм відповідних, подана у таблиці 6.2. Унарні оператори *, + і ? мають найвище старшинство, потім іде конкатенація, а далі - вибір (|). Через "r" позначено будь-яке регулярне вираження.
Таблиця 6.2 – Регулярні вираження в мові awk
Вираження |
Відповідає |
c \c ^ $ . [s] [^s] r* r+ r? (r) r1r2 r1|r2 |
будь-якому символу "c", що не є метасимволом символу "c" початку рядка кінцю рядка будь-якому символу, крім символу "новий рядок" будь-якому символу з набору "s" будь-якому символу, відсутньому в наборі "s" жодне або будь-яке число появ r одна й більше появ r жодна або одна поява r r r1, за яким потрібно r2 (конкатенація) r1 або r2 (вибір) |