- •Лабораторна робота 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
Завдання Вивести назви всіх файлів у заданому каталозі, що мають однаковий перший рядок.
Формат застосування цієї команди повинен бути:
команда каталог...
Cкрипт названий ex7_2, його текст із докладними коментарями приводиться нижче.
#!/bin/bash2
# ============================================================== #
# Скрипт ex7_2: пошук співпадаючих перших рядків #
# ============================================================== #
# ========================================================
# Запам'ятовуємо поточний каталог
mydir=`pwd`
# ========================================================
# Параметри команди являють собою список каталогів.
# Наступним оператором організує цикл, який виконується до
# тих пор, поки залишаються неопрацьовані параметри.
while [ $# -ne 0 ]
do
# ======================================================
# Перехід у каталог, що задається 1-м параметром;
# діагностика направляється в тимчасовий файл
cd $1 2>$HOME/temp01
# ======================================================
# Перевірка - не чи порожній файл із діагностикою
if test -s $HOME/temp01
then
# ====================================================
# Якщо є діагностика - каталог недоступний
echo "Каталог $1 недоступний/не існує"
# ====================================================
# Перехід до наступного параметра
shift
# ====================================================
# Пропуск залишку тіла циклу
continue
fi
# ======================================================
# Ми ввійшли в заданий каталог
echo "Каталог: $1"
# ======================================================
# Вибираються файли розміром більше 0,
# список файлів направляється в потік
find -size +0c -type f |
# ======================================================
# Файли в списку виведені із вказівкою каталогу ./,
# від цих символів потрібно позбутися;
# результат записується в тимчасовий файл
sed 's/.\///' >$HOME/temp01
# ======================================================
# Цикл поки у файлі temp01 щось залишається
while test -s $HOME/temp01
do
# ====================================================
# Вибирається в змінну $f1 перший рядок з
# тимчасового файлу - ім'я чергового файлу
f1=`head -n1 $HOME/temp01`
# ====================================================
# Вибирається в змінну $s1 перший рядок з
# обраного файлу
s1=`head -n1 $f1`
# ====================================================
# $n - ознака того, що збіг рядків не знайдений
# $m - номер другого файлу зі списку
n="no"; m=2;
# ====================================================
# Нескінченний цикл - вихід по break
while [ 1 ]
do
# ==================================================
# Вибирається $ m-я рядок зі списку файлів - ім'я файлу
f2=`sed -n ''$m'p' $HOME/temp01`
# ==================================================
# Якщо обраний порожній рядок - список файлів закінчився
if [ "$f2" = "" ]; then
# ================================================
# у цьому випадку - вихід із циклу
break
# ================================================
# Кінець умови if [ "$f2" = "" ]
fi
# ==================================================
# Вибирається 1-я рядок із цього файлу
s2=`head -n1 $f2`
# ==================================================
# Рядок рівняється із запомненной раніше рядком з 1-го
# файлу в списку
if [ "$s1" = "$s2" ]; then
# ================================================
# Перевірка - чи були вже збігу
if [ "$n" = "no" ]; then
# ==============================================
# Якщо збігів не було - виводиться ім'я 1-го файлу зі списку
echo -n "$f1 "; n="yes"
# ==============================================
# Кінець умови if [ "$n" = "no" ]
fi
# ================================================
# Виводиться ім'я файлу, у якому знайдений збіг
echo -n "$f2 "
# ================================================
# Файлу, у якому знайдений збіг, віддаляється з файлу-списку
sed ''$m'd' $HOME/temp01 > $HOME/temp02
cat $HOME/temp02 >$HOME/temp01
# ================================================
# Кінець дій при збігу
else
# ================================================
# Якщо немає збігу - перехід до наступного файлу зі списку
m=`expr $m + 1`
# ================================================
# Кінець дій при відсутності збігу
fi
# ==================================================
# Кінець циклу перебору інших файлів списку
done
# ====================================================
# Якщо були знайдені збіги - виводиться текст загального рядка
if [ "$n" = "yes" ]; then
echo "- $s1"
fi
# ====================================================
# Видалення 1-й рядка зі списку імен файлів
sed '1d' $HOME/temp01 > $HOME/temp02
cat $HOME/temp02 >$HOME/temp01
# ====================================================
# Кінець циклу перебору імен файлів
done
# ======================================================
# Перехід до наступного параметра
shift
# ======================================================
# Кінець списку перебору параметрів
done
# ========================================================
# Видалення тимчасового файлу
rm $HOME/temp*
# ========================================================
# Повернення у вихідний каталог
cd "$mydir"
# ======== Кінець скрипта ex7_2 ================================= #
Зразок виконання створеної команди:
bash2-2.05$ ex7_2 ../ap10999 /home/metod Каталог ../ap10999 недоступний/не існує Каталог: /home/metod Hum-Dum.txt H1 - Humpty-Dumpty nikol_01 nikol_02 nikol_03 nikol_04 nikol_05 nikol_06 nikol_07 nikol_08 nikol_09 nikol_10 nikol_11 nikol_12 nikol_13 nikol_14 nikol_15 nikol_16 nikol_17 nikol_1 8 - Микола Олейников bash2-2.05$ |
|