
- •Лабораторна робота 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
- •Варіанти індивідуальних завдань
Завдання 2
У файлі query1 вибрати всі рядки, у яких зарплата становить ціле число тисяч.
Розв'язок 1:
Згідно зі стуктурою файлу, стовпець зарплати починається з позиції 60, тому - підвираз: ".\{59\}".
Якщо зарплата становить ціле число тисяч, то в ній утримується одна або кілька цифр, за якими іде три нулі - підвираз: "[0-9]\{1,\}000".
Однак можлива (теоретично) зарплата, наприклад "10001", тому варто подбати про те, щоб наступні за трьома нулями символи були відмінні від значущих цифр. Таких символів може бути скільки завгодно, і ця умова можна забезпечити підвиразом: "[0-9]*".
Підсумкове регулярне вираження:
".\{59\}[0-9]\{1,\}000[0-9]*"
Протокол виконання:
Script started on Thu Sep 5 07:44:14 2002 bash2-2.05$ grep ".\{59\}[0-9]\{1,\}000[0-9]*" ../metod/query1 7569 CHRIS L ALBERTS MANAGER RESEARCH NEW-YORK 3000 7788 DONALD T SCOTT ANALYST RESEARCH DALLAS 3000 7799 MATTHEW G FISHER ANALYST RESEARCH NEW-YORK 3000 7839 FRANCIS A KING PRESIDENT ACCOUNTING NEW-YORK 5000 7902 JENNIFER D FORD ANALYST RESEARCH DALLAS 3000 bash2-2.05$
Script done on Thu Sep 5 07:44:19 2002 |
Розв'язок 2:
Оскільки зарплата є останнім полем рядка файлу query1, можливо, можна просто зажадати, щоб три нулі були останніми символами рядка й сформулювати регулярне вираження в такий спосіб: "000$". Однак, такий розв'язок може наткнутися на неочевидну перешкоду. Усе залежить від того, якими засобами був підготовлений вихідний файл query1 (особливо, якщо він був перенесений з іншої системи). Справа в тому, що різні програми й редактори використовують різні способи перекладу рядка, і наприкінці рядка можуть виявитися деякі додаткові (невидимі "неозброєним оком" символи. Таким чином, останній 0 у зарплаті може ще не бути останнім символом рядка. Як правило, побачити ці додаткові символи можна, виконавши команду cat з опцією -v. У цьому випадку на видачі команди cat можна побачити недрукований символ, показуваний, наприклад, як: "M".
Наступні протокол ілюструє цей випадок:
Script started on Thu Sep 5 07:45:53 2002 bash2-2.05$ grep "000$" ../metod/query1 bash2-2.05$ cat -v ../metod/query1 7369 JOHN Q SMITH CLERK RESEARCH DALLAS 800M 7499 KEVIN J ALLEN SALESPERSON SALES CHICAGO 1600M 7505 JEAN K DOYLE MANAGER SALES NEW-YORK 2850M 7506 LYNN S DENNIS MANAGER SALES DALLAS 2750M 7507 LESLIE D BAKER MANAGER OPERATIONS NEW-YORK 2200M 7521 CYNTHIA D WARD SALESPERSON SALES CHICAGO 1250M 7555 DANIEL T PETERS SALESPERSON SALES NEW-YORK 1250M 7557 KAREN P SHAW SALESPERSON SALES NEW-YORK 1250M 7560 SARAH S DUNCAN SALESPERSON SALES DALLAS 1250M 7564 GREGORY J LANGE SALESPERSON SALES DALLAS 1250M 7566 TERRY M JONES MANAGER RESEARCH DALLAS 2975M 7569 CHRIS L ALBERTS MANAGER RESEARCH NEW-YORK 3000M 7600 RAYMOND Y PORTER SALESPERSON SALES NEW-YORK 1250M 7609 RICHARD M LEWIS STAFF OPERATIONS DALLAS 1800M 7654 KENNETH J MARTIN SALESPERSON SALES CHICAGO 1250M 7676 DENISE D SOMMERS STAFF OPERATIONS CHICAGO 1850M 7698 MARION S BLAKE MANAGER SALES CHICAGO 2850M 7782 CAROL F CLARK MANAGER ACCOUNTING NEW-YORK 2450M 7788 DONALD T SCOTT ANALYST RESEARCH DALLAS 3000M 7789 LIVIA N WEST SALESPERSON SALES DALLAS 1500M 7799 MATTHEW G FISHER ANALYST RESEARCH NEW-YORK 3000M 7820 PAUL S ROSS SALESPERSON SALES BOSTON 1300M 7839 FRANCIS A KING PRESIDENT ACCOUNTING NEW-YORK 5000M 7876 DIANE G ADAMS CLERK RESEARCH DALLAS 1100M 7900 FRED S JAMES CLERK SALES CHICAGO 950M 7902 JENNIFER D FORD ANALYST RESEARCH DALLAS 3000M 7916 GRACE M ROBERTS ANALYST RESEARCH NEW-YORK 2875M 7919 MICHAEL A DOUGLAS CLERK RESEARCH NEW-YORK 800M 7934 BARBARA M MILLER CLERK ACCOUNTING NEW-YORK 1300M 7950 ALICE B JENSEN CLERK SALES NEW-YORK 750M 7954 JAMES T MURRAY CLERK SALES DALLAS 750M bash2-2.05$
Script done on Thu Sep 5 07:46:12 2002 |
Розв'язок 3:
Уточнимо логікові попереднього розв'язку, оказавшегося неправильним. За трьома нулями перед кінцем рядка може випливати (а може й не випливати) ще один символ, відмінний від значущої цифри:
"000[0-9]\{0,1\}"
Протокол виконання:
Script started on Thu Sep 5 07:48:12 2002 bash2-2.05$ grep "000[0-9]\{0,1\}" ../metod/query1 7569 CHRIS L ALBERTS MANAGER RESEARCH NEW-YORK 3000 7788 DONALD T SCOTT ANALYST RESEARCH DALLAS 3000 7799 MATTHEW G FISHER ANALYST RESEARCH NEW-YORK 3000 7839 FRANCIS A KING PRESIDENT ACCOUNTING NEW-YORK 5000 7902 JENNIFER D FORD ANALYST RESEARCH DALLAS 3000 bash2-2.05$
Script done on Thu Sep 5 07:48:15 2002 |