Маленький підручник з Sed і Awk

У цьому додатку міститься дуже короткий опис прийомів роботи з утилітами обробки тексту sed і awk. Тут будуть розглянуті лише кілька базових команд, яких, в принципі, буде досить, щоб навчитися розуміти найпростіші конструкції sed і awk всередині сценаріїв на мові командної оболонки.

sed: неінтерактивний редактор текстових файлів

awk: мова обробки шаблонів з C-подібним синтаксисом

При всіх своїх відмінностях, ці дві утиліти володіють схожим синтаксисом, вони обидві вміють працювати з регулярними виразами , Обидві, по-замовчуванню, читають дані з пристрою stdin і обидві виводять результат обробки на пристрій stdout. Обидві є утилітами UNIX-систем, і чудово можуть взаємодіяти між собою. Висновок від однієї може бути перенаправлений, по конвеєру, на вхід іншого. Їх комбінування надає сценаріями, мовою командної оболонки, міць і гнучкість мови Perl.

Sed - це неінтерактивний рядковий редактор. Він приймає текст або з пристрою stdin, або з текстового файлу, виконує деякі операції над рядками і потім виводить результат на пристрій stdout або в файл. Як правило, в сценаріях, sed використовується в конвеєрній обробці даних, спільно з іншими командами і утилітами.

Sed визначає, по заданому адресного простору, над якими рядками слід виконати операції. Адресний простір рядків задається або їх порядковими номерами, яким шаблоном. Наприклад, команда 3d змусить sed видалити третій рядок, а команда / windows / d означає, що всі рядки, що містять, повинні бути видалені.

З усього розмаїття операцій, ми зупинимося на трьох, які використовуються найбільш часто. Це p - друк (на stdout), d - видалення і s - заміна.

Таблиця B-1. Основні операції sed

Операція Назва Опис [діапазон рядків] / p print Друк [зазначеного діапазону рядків] [діапазон рядків] / d delete Видалити [вказаний діапазон рядків] s / pattern1 / pattern2 / substitute замінити перший зустрінуте відповідність шаблону pattern1, в рядку, на pattern2 [діапазон рядків] / s / pattern1 / pattern2 / substitute замінити перший зустрінуте відповідність шаблону pattern1, на pattern2, в зазначеному діапазоні рядків [діапазон рядків] / y / pattern1 / pattern2 / transform замінити будь-які символи з шаблону pattern1 на відповідні символи з pattern2, в зазначеному діапазоні рядків (еквівалент команди tr) g global Операція виконується н ад всіма знайденими відповідниками всередині кожної з заданих рядків Операція Назва Опис [діапазон рядків] / p print Друк [зазначеного діапазону рядків] [діапазон рядків] / d delete Видалити [вказаний діапазон рядків] s / pattern1 / pattern2 / substitute замінити перший зустрінуте відповідність шаблону pattern1, в рядку, на pattern2 [діапазон рядків] / s / pattern1 / pattern2 / substitute замінити перший зустрінуте відповідність шаблону pattern1, на pattern2, в зазначеному діапазоні рядків [діапазон рядків] / y / pattern1 / pattern2 / transform замінити будь-які символи з шаблону pattern1 на відповідні символи з pattern2, в зазначеному діапазоні рядків (еквівалент команди tr) g global Операція виконується н  ад всіма знайденими відповідниками всередині кожної з заданих рядків

Без оператора g (global), операція заміни буде проводитися тільки для першого знайденого збіги, із заданим шаблоном, в кожному рядку.

В окремих випадках, операції sed необхідно брати в лапки.

sed -e '/ ^ $ / d' $ filename # Ключ -e говорить про те, що далі йде рядок, яка повинна інтерпретуватися # + як набір інструкцій редагування. # (При передачі однієї інструкції, ключ "-e" є необов'язковим.) # "Суворі" лапки ( '') запобігають інтерпретацію символів регулярного виразу, # + як спеціальних символів, командним інтерпретатором. # # Дії виробляються над рядками, що містяться в файлі $ filename.

В окремих випадках, команди редагування не працюють в одиночних лапках.

filename = file1.txt pattern = BEGIN sed "/ ^ $ pattern / d" "$ filename" # Результат цілком передбачуваний. # Sed '/ ^ $ pattern / d' "$ filename" дає інший результат. # В даному випадку, в "строгих" лапках ( '...'), # + не відбувається підстановки значення змінної "$ pattern".
filename = file1

Sed використовує ключ -e для того, щоб визначити, що наступний рядок є інструкцією, або набором інструкцій, редагування. Якщо інструкція є єдиною, то використання цього ключа не є обов'язковим.

sed -n '/ xzy / p' $ filename # Ключ -n змушує sed вивести тільки ті рядки, які збігаються з зазначеним шаблоном. # В іншому випадку (без ключа -n), будуть виведені всі рядки. # Тут, ключ -e не є обов'язковим, оскільки тут стоїть єдина команда.

Таблиця B-2. Приклади операцій в sed

Операція Опис 8d Видалити 8-й рядок. / ^ $ / D Видалити всі порожні рядки. 1, / ^ $ / d Видалити всі рядки до першої порожній рядки, включно. / Jones / p Вивести рядки, що містять (з ключем -n). s / Windows / Linux / В кожному рядку, замінити перший зустрілося слово на слово. s / BSOD / stability / g В кожному рядку, замінити всі зустрілися слова на. s / * $ // Видалити всі прогалини в кінці кожного рядка. s / 00 * / 0 / g Замінити всі послідовності провідних нулів одним символом "0". / GUI / d Видалити всі рядки, що містять. s / GUI // g Видалити всі знайдені, залишаючи решту рядка без змін.

Заміна рядка символом нового рядка, еквівалентна видалення частини рядка, що збігається з шаблоном. Інша частина рядка залишається без змін. Наприклад, s / GUI //, змінить наступний рядок

The most important parts of any application are

its GUI and sound effects на The most important parts of any application are its and sound effects

Символ зворотного слеша представляє символ перекладу рядка, як символ заміни. В цьому випадку, заміщає вираз триває на наступному рядку.

s / ^ * / \ / g Ця інструкція замінить початкові прогалини в рядку на символ перекладу рядка. Очікуваний результат - заміна відступів на початку параграфа порожніми рядками.

Вказівка ​​діапазону рядків, що передує однієї, або більш, інструкції може зажадати укладення інструкцій у фігурні дужки, з відповідними символами переведення рядка.

/ [0-9A-Za-z] /, / ^ $ / {/ ^ $ / d} У цьому випадку будуть видалені тільки перші з кількох, що йдуть підряд, порожніх рядків. Це може використовуватися для установки однорядкових інтервалів в файлі, залишаючи, при цьому, порожні рядки між параграфами.
/ [0-9A-Za-z] /, / ^ $ / {/ ^ $ / d} У цьому випадку будуть видалені тільки перші з кількох, що йдуть підряд, порожніх рядків

Швидкий спосіб установки подвійних міжрядкових інтервалів в текстових файлах - sed G filename.

Приклади використання sed в сценаріях командної оболонки, ви знайдете в:

  1. приклад 33-1

  2. приклад 33-2

  3. приклад 12-2

  4. Приклад A-3

  5. приклад 12-12

  6. приклад 12-20

  7. Приклад A-13

  8. Приклад A-19

  9. приклад 12-24

  10. приклад 10-9

  11. приклад 12-33

  12. Приклад A-2

  13. приклад 12-10

  14. приклад 12-8

  15. Приклад A-11

  16. приклад 17-11


Посилання на додаткові відомості про sed, ви знайдете в розділі література .

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: