Команди sort, uniq, join, cut, paste, split

Порядок виконання команд

Кома́нди перехо́ду, Кома́нди переда́чі керування (анг. branch instructions) — різновид команд передачі управління в архітектурах системи команд ЕОМ, які змінюють послідовний порядок виконання програми (тобто перезавантажують лічильник команд адресою, записаною в самій команді переходу, а не збільшуючи його значення на довжину поточної команди).

Команди переходу можуть бути умовними (conditional brahch) та безумовними (unconditional branch).

Залежно від реалізації мови програмування (високого чи низького рівня), команди передачі управління можуть мати свої особливості. Так, у мовах низького рівня, типу асемблера, реалізація команди умовного переходу може мати вигляд jz (), jnz () — перехід за нульовою (ненульовою) умовою.

18. Регулярні вирази

Регулярний вираз (в програмуванні) — це рядок, що описує або збігається з множиною рядків, відповідно до набору спеціальних синтаксичних правил. Вони використовуються в багатьох текстових редакторах та допоміжних інструментах для пошуку та зміни тексту на основі заданих шаблонів. Багато мов програмування підтримують регулярні вирази для роботи з рядками. Наприклад, Perl та Tcl мають потужний механізм для роботи, вбудований безпосередньо в їх синтаксис. Завдяки набору утиліт (включаючи редактор sed та фільтрgrep), що входили до складу дистрибутивів Юнікс регулярні вирази стали відомими та поширеними.

Регулярні вирази базуються на теорії автоматів та теорії формальних мов. Ці розділи теоретичної кібернетики займаються дослідженням моделей обчислення (автомати) та способами описання та класифікації формальних мов.

Регулярний вираз (часто називається шаблон) є послідовністю, що описує множину рядків. Ці послідовності використовуються для того, аби дати точне описання множини, не перелічуючи всі її елементи. Наприклад, множина, що складається із слів «грати» та «ґрати» може бути описана регулярним виразом «[гґ]рати». В більшості формалізмів, якщо існує регулярний вираз, що описує задану множину, тоді існує нескінченна кількість варіантів, які описують цю множину.

19. Сімейство команд Grep

Команда grep має два варіанти - egrep і fgrep, тому говорять про сімейство програм grep. Спочатку опишемо стандартну команду grep, а потім розглянемо її варіанти.

конструкція

$ Grep [ прапори ] шаблон імена_файлов

проводить пошук в пойменованих файлах ( імена файлів розділяються пробілами ) або в стандартному вхідному потоці і виводить на друк кожен рядок , в яку входить шаблон. Команда grep неоціненна для пошуку змінних в програмах і слів у документах , а також для вибору частини вихідного потоку програми :

$ Grep - n variable * . [ Гл ]

Пошук variable в тексті на Сі .

$ Grep From $ Mail

Друк заголовків повідомлень з поштової посилки .

$ Grep From $ Mail | grep - v mary

Заголовки , які полуенни немає від адресата mary .

$ Grep - y mary $ HOME / lib / phone - book

Пошук номера mary .

Прапор - n ініціює висновок номерів рядків , прапор - v змінює на протилежне значення умови , а флаг- y допускає зіставлення малих літер з шаблону з прописними буквами з файлу (але прописні літери таки можуть зіставлятися тільки з прописними ) .

У всіх розглядалися досі прикладах проводився пошук звичайних рядків з літер і чисел . Але команда grep може шукати і складніші шаблони : вона інтерпретує вираз згідно простому мови для опису рядків. З технічної точки зору шаблон представляє в деякій мірі обмежену форму специфікацій рядків , звану регулярним виразом. Команда інтерпретує такі ж регулярні вирази , як і редактор ed . Насправді , команда grep була створена ( за один вечір ) прямим редагуванням ed .

Регулярні вирази характеризуються тим , що ряду символів , таким , як * і т. п. , приписується спеціальне значення, яке використовується інтерпретатором . Є ще кілька метасимволов , але , на жаль , з різними значеннями. У наведеній далі таблиці показані всі метасимволи регулярних виразів , і ми коротко їх тут розглянемо.

Метасимволи ^ і $ прив'язують шаблон до початку ( ) ^ або кінця ($) рядка.

наприклад ,

$ Grep From $ MAIL

шукає рядки , содежащіе From у вашій поштовій посилці , але

$ Grep ' From ' $ MAIL

видає рядки, що починаються з From , які , найімовірніше , будуть заголовними рядками повідомлень. Метасимволи регулярних виразів перетинаються з метасимвол інтерпретатора , тому завжди має сенс укладати шаблони команда grep в апострофи .

Команда grep допускає класи символів , подібні тим, що використовується інтерпретатором : так , [ az ] задає будь-яку малу літеру . Але є й відмінності - якщо клас символів команди grep починається з символу слабкого наголосу ^ , то шаблон задає будь-який символ , крім входять у даний клас . Значить , [^ 0-9] задає будь-який символ , крім цифри . Як у інтерпретаторі , зворотна дробова риса екранує символи ] і - в класі символів , але команди grep і ed вимагають , щоб ці символи використовувалися там , де їх значення недвозначно . Наприклад , шаблон [] [-] задає відкривати або закривати квадратну дужку або знак мінус.

Точка ' .' еквівалентна '?' в інтерпретаторі : вона задає будь-який символ . ( Точка по всій видимості , є символ , призначення якого різному для різних програм. )

Нижче наводяться два приклади :

$ Ls - l | grep '^ d' Список імен вкладених каталогів

$ Ls - l | grep '^ - . - Rw ' Список файлів , доступних всім для читання і запису.

Символ '^ ' і сім точок задають будь-які сім символів на початку рядка; в разі застосування до вихідного потоку команди ls - l зачепити будь-який рядок права доступу.

Операція " повторювач " ( '*' ) застосовна у вираженні до передує її символу або метасимвол (включаючи клас символів ), і разом вони позначають будь-яке число входжень символу або метасимвола . Наприклад , x * задає послідовність літер x довільної довжини , [ a - zA - Z] - будь-який рядок символів , а * x - все до останнього символу x в рядку включно.

Необхідно відзначити кілька важливих моментів пов'язаних з повторювачем .

По-перше , повторювач діє тільки на один символ , тому xy * відповідає x , за яким йдуть yy - , але не послідовності типу xyxyxy .

По-друге , будь-яке число включає нуль , тому якщо ви хочете , щоб символ був присутній , в шаблоні його потрібно повторити. Наприклад , правильним виразом , що задає рядок букв , є таке : [ a - zA - Z] [ a - zA - Z ] * ​​(буква, за якою слід нуль або більше літер). Регулярний вираз . * Відповідає * , тобто метасимвол інтерпретатора , використовуваному для імен файлів. Жодне регулярний вираз команди grep не відповідає символу перекладу рядка : вислови зіставляються з кожним рядком окремо. Регулярні вирази роблять команду grep простою мовою програмування. Згадайте , що друге поле файлу паролів містить зашифрований пароль.

Наведена нижче команда проводить пошук користувачів , що не мають пароля

$ Grep ' [ : ] * :: ' / etc / password

Шаблон розшифровується так : початок рядка , будь-яке число символів , відмінних від двокрапки , дві двокрапки .

Коди завершення роботи команд сімейства grep :

0 Знайдена хоча б один рядок із заданим шаблоном .

1 не знайдено жодного рядка із заданим шаблоном .

> 1 Виявлена ​​синтаксична помилка чи вказані файли недоступні для читання.

Обробка помилок : при невірному шаблоні або прапорі команда завершується . Якщо який-небудь з файлів недоступний для читання , grep виводить повідомлення , код завершення більше 1 , але триває обробка наступного файлу .

20. Утиліта awk

Awk — це мова програмування, призначена для сканування та обробки зразків. Основним застосуванням мови Awk є обробкатекстових документів. Вона гарно пристосована до малих проектів, в яких необхідне форматування та обробка текстової інформації, і має деякі властивості корисні при роботі з базами даних. Її основні функції обробки текстів вийшли з сімейства інстументів подібних до Grep операційноїї системи Юнікс.

Струкрута

"AWK — мова для обробки файлів тексту. Файл розглядається як послідовність записів, і без обумовлення кожен рядок є записом. Кожен рядок розбивається на послідовність полів, тому можна говорити про перше слово у рядку як перше поле, друге слово — друге тощо. Програма на AWK є послідовністю тверджень типу шаблон-дія. AWK читає по одному рядку за раз. Рядок сканується на відповідність кожному шаблону в програмі, і у разі збігу виконується відповідна дія." — Альфред Ахо

Редактор Sed

sed (від англ. Stream EDitor) — потоковий текстовий редактор (а також мова програмування), що застосовує різні зумовлені текстові перетворення до послідовного потоку текстових даних.

sed отримує вхідний потік (зазвичай файл), і редагує кожен рядок згідно з правилами, визначеними в sed-скрипті з використанням простої мови sed, і потім виводить результат у вихідний потік.

sed часто називають неінтерактивним текстовим редактором. Він відрізняється від звичайних текстових редакторів «інвертованістю» по відношенню до тексту і набору команд редагування. Звичайні текстові редактори спочатку завантажують весь текст документа, а потім застосовують до нього команди по одній, тоді як sed спочатку завантажує в себе набір команд, а потім застосовує весь набір команд до кожного рядка тексту. Оскільки одночасно в пам'яті знаходиться тільки один рядок, sed може обробити досить великі текстові файли.

Набір команд sed зроблений за зразком редактора ed, проте необхідно пам'ятати про його інвертованість. Наприклад, команда 25d редактора ed означає «йдіть до рядка 25 і видаліть його», тоді як та ж команда sed означає «якщо це рядок з номером 25, то видаліть (не виводьте) його». Відомий виняток — команди копіювання і переміщення, що охоплюють діапазон рядків і таким чином не мають прямих еквівалентів в sed. Натомість, sed вводить додатковий буфер, названий «простором захоплення», і додаткові команди для управління ним. Наприклад команда «Скопіювати рядок 25 в рядок 76» (25t76) в ed була б закодована як дві окремі команди (25h; 76g) в sed для того, щоб зберегти рядок в просторі захоплення доти, поки дані не будуть витягнуті.

команди sort, uniq, join, cut, paste, split

Sort

Считывает входные данные, сортирует их и выводит результат на экран, в файл или на другое устройство. SORT работает как фильтр, считывая символы в заданном столбце и переупорядочивая их в возрастающем или убывающем порядке.

Uniq

uniq — утиліта Unix, за допомогою якої у файлі можна вивести або відфільтрувати рядки, що повторюються. Якщо вхідний файл заданий як («-») або не заданий зовсім, читання проводиться із стандартного вводу. Якщо вихідний файл не заданий, запис проводиться в стандартний вивод. Друга і подальші копії сусідніх рядків, що повторюються, не записуються. Вхідні рядки, що повторюються, не розпізнаються, якщо вони не слідують строго один за одним, тому може потрібно попереднє сортування файлів.

Cut

cut — утиліта UNIX, що друкує вибрані частини рядків з кожного файлу на стандартний вивід.

Витяг сегментів рядків звичайно відбувається по байтах (-b), по символах (-c), або по полях (-f) обмежених розподільниками (-d — символ табуляції за умовчанням). Діапазон може бути встановлений в кожному випадку, для цього слід вказати один з варіантів: N, N-M, N- (від N і до кінця рядка), або -M (від початку рядка до M).

Paste

paste (від англ. paste — клеїти) — утиліта Unix, призначена для вставки колонок: програма розглядає файли, як вертикальні стовпчики, сполучає їх і виводить в стандартний потік виводу.

Split

split — команда Unix, що копіює файл і що розбиває його на окремі файли заданої довжини. Як аргументи їй треба вказати ім'я початкового файлу і префікс імен вихідних файлів. Імена вихідних файлів складатимуться з цього префікса і двох додаткових букв аа, ab, ас і так далі (без пропусків і крапок між префіксом і буквами). Якщо префікс імен файлів не заданий, то за умовчанням використовується х, так що вихідні файли називатимуться хаа, xab і так далі.

23. Процес реєстрації в Linux

ОС Linux розрахована на роботу з ПЕОМ багатьох користувачів. Для того, щоб

забезпечити збережуваність файлів користувачів, у цій системі використовують імена

користувачів і паролі, які визначають права доступу користувача до ресурсів ПЕОМ (файлів,

дисків, каталогів, програм). На ПЕОМ обов’язково є суперкористувач з іменем root, при

встановленні Linux потрібно задати пароль для цього користувача. Пароль суперкористувача

10варто не розголошувати і використовувати лише для налагодження системи. Для

повсякденної роботи потрібно визначити імена користувачів і їх паролі та права доступу. Ці

імена і паролі задає суперкористувач. При придбанні ПЕОМ з попередньо встановленою ОС

Linux задайте пароль суперкористувача і пароль хоча-б одного користувача з обмеженими

правами (повсякденна робота з правами суперкористувача небезпечна, оскільки ви

випадково можете видалити важливі для операційної системи файли).

Після ввімкнення і завантаження необхідних системних програм на екрані дисплея

з’явиться вікно реєстрації в системі.

24. Файл еtc\.profile

При вході в систему першого зчитується файл / etc / profile . Він керує наступними системними змінними за замовчуванням :

експортовані змінні

маска створення файлу ( umask )

типи терміналів

поштові повідомлення, що вказують на надходження нової пошти

Системний адміністратор налаштовує файл profile для всіх користувачів системи. Тільки він може змінювати цей файл.

Нижче наведено приклад типового файлу / etc / profile :

# Задати маску створення файлу

unmask 022

# Повідомлення про поштою

MAIL = / usr / mail / $ LOGNAME

# Додати каталог / bin в список каталогів для пошуку

PATH = / usr / bin :/ usr / sbin :/ etc ::

# Задати тип терміналу

TERM = lft

# Зробити глобальними деякі змінні

export MAIL PATH TERM

Наши рекомендации