- •Лабораторна робота 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
- •Варіанти індивідуальних завдань
Завдання 1, варіант 2
Перший символ кожного рядка замінити на перший символ наступного рядка. Останній рядок залишається без змін.
Розв'язок:
pr -n' ' -T Hum-Dum.txt | |
Вивід з нумерацією рядків. |
cut -c7 | |
Виділення 1-го символу. |
sed -n '2,$p' >temp01 |
Видалення 1-й рядка, символ з неї нікуди не підставляється.1-е символи рядків зберігаються в тимчасовому файлі. |
pr -n' ' -T Hum-Dum.txt | |
Вивід з нумерацією рядків. |
sed -n 's/[ ]*//p' | |
Видалення головних пробілів. |
cut -f1 -d' ' | |
Вивід тільки стовпця номерів. |
paste -d' ' - temp01 | |
Зчеплення номера рядка (вхідний потік) з 1-м символом наступного рядка (тимчасовий файл). Виходить, наприклад: '3 H'. |
sed '$d' | |
Видалення останнього рядка - у неї нічого не підставляється. |
sed -n 's/ /s\/\\.\//p' | |
Заміна пробілу між номером і символом на службові символи. Виходить: '3s/./H'. |
sed -n 's/$/\//p' >temp01 |
Додавання службових символів у кінець рядка. Виходить: '3s/./H/' - команда sed на зміну 1-го символу рядка. ( Зверніть увагу: ця команда не закінчується прапором 'p'.) Команди зберігаються в тимчасовому файлі. |
sed -f temp01 Hum-Dum.txt >result |
Тимчасовий файл використовується як командний скрипт sed. ( Зверніть увагу: якби в командах скрипта не було б прапора 'p', а в даній команді не було б опції -n, не вивівся б останній рядок, для якого немає підстановки в скрипті). Результат зберігається. |
rm -f temp* |
Видалення тимчасового файлу. |
Протокол виконання:
Script started on Thu Sep 5 08:05:45 2002 bash2-2.05$ pr -n' ' -T Hum-Dum.txt | > cut -c7 | > sed -n '2,$p' >temp01 bash2-2.05$ pr -n' ' -T Hum-Dum.txt | > sed -n 's/[ ]*//p' | > cut -f1 -d' ' | > paste -d' ' - temp01 | > sed '$d' | > sed -n 's/ /s\/\\.\//p' | > sed -n 's/$/\//p' >temp01 bash2-2.05$ sed -f temp01 Hum-Dum.txt >result bash2-2.05$ rm -f temp* bash2-2.05$ cat result Sumpty-Dumpty Het on the wall. Humpty-Dumpty Aad a greate fall. And all the king's horses, Cnd all the king's man. Can not Humpty, Han not Dumpty, Dumpty-Dumpty, Sumpty-Humpty, Aet on this wall Again. bash2-2.05$ Script done on Thu Sep 5 08:06:12 2002 |
Завдання 1, варіант 3
У передостанньому рядку, який закінчується крапкою, поміняти місцями перше слово з останнім.
Розв'язок:
sed -n '/\.$/=' Hum-Dum.txt | |
Вивід номерів усіх рядків, які закінчуються крапкою. |
tail -2 | |
Вивід двох останні із цих номерів. |
head -n1 > temp01 |
Вивід першого із двох останніх номерів. Збереження в temp01. |
sed -n 's/$/s\/ \.\*\/\/p/p' temp01 >temp02 |
Формування команди sed на вивід 1-го слова рядка з номером, збереженим в temp01. Команда зберігається в temp02. |
sed -n -f temp02 Hum-Dum.txt >temp03 |
Виконання команди з temp02, запис 1-го слова в temp03. |
sed -n 's/$/s\/\[\ \]\* \/\/gp/p' temp01 >temp02 |
Формування команди sed на вивід останнього слова рядка з номером, збереженим в temp01. Команда зберігається в temp02. |
sed -n -f temp02 Hum-Dum.txt >temp04 |
Виконання команди з temp02, запис останнього слова в temp04. |
paste -d' ' temp01 temp03 | |
Зчеплення через пробіл номера рядка й останнього слова рядка. |
sed -n 's/ /s\/\ [\ \]\*$\/ /p' | |
Формування команди sed на заміну в рядку з номером, обраним з temp01, 1-го слова на текст, обраний з temp03. |
sed -n 's/$/\//p' >temp03 |
Завершення формування команди й збереження її в temp03. |
paste -d' ' temp01 temp04 | |
Зчеплення через пробіл номера рядка й 1-го слова рядка. |
sed -n 's/ /s\/\\[\ \]\* \//p' | |
Формування команди sed на заміну в рядку з номером, обраним з temp01, останнього слова на текст, обраний з temp04. |
sed -n 's/$/ \//p' >temp04 |
Завершення формування команди й збереження її в temp04. |
sed -f temp03 Hum-Dum.txt | |
Виконання для вихідного файлу команди з temp03. |
sed -f temp04 >result |
Виконання для того, що вийшло, команди з temp04. |
rm -f temp* |
Видалення тимчасових файлів. |
Протокол виконання:
Script started on Thu Sep 5 08:10:13 2002 bash2-2.05$ sed -n '/\.$/=' Hum-Dum.txt | > tail -2 | > head -n1 > temp01 bash2-2.05$ sed -n 's/$/s\/ \.\*\/\/p/p' temp01 >temp02 bash2-2.05$ sed -n -f temp02 Hum-Dum.txt >temp03 bash2-2.05$ sed -n 's/$/s\/\[\ \]\* \/\/gp/p' temp01 >temp02 bash2-2.05$ sed -n -f temp02 Hum-Dum.txt >temp04 bash2-2.05$ paste -d' ' temp01 temp03 | > sed -n 's/ /s\/\ [\ \]\*$\/ /p' | > sed -n 's/$/\//p' >temp03 bash2-2.05$ paste -d' ' temp01 temp04 | > sed -n 's/ /s\/\\[\ \]\* \//p' | > sed -n 's/$/ \//p' >temp04 bash2-2.05$ sed -f temp03 Hum-Dum.txt | > sed -f temp04 >result > bash2-2.05$ rm -f temp* bash2-2.05$ cat result Humpty-Dumpty Set on the wall. Humpty-Dumpty Had a greate fall. And all the king's horses, man. all the king's And Can not Humpty, Can not Dumpty, Humpty-Dumpty, Dumpty-Humpty, Set on this wall Again. bash2-2.05$ Script done on Thu Sep 5 08:10:46 2002 |