Назва

sed - потоковий редактор (Stream EDitor)

Стислий огляд

sed [-n] [-V] [--quiet] [--silent] [--version] [--help] [-e script] [--expression=script] [-f script-file] [--file=script-file] [script-if-no-other-script] [file...]

Опис

sed являється потоковим редактором. Потоковий редактор використовується для здійснення базових трансформувань ввідного потоку (файлу або вводу через конвеєр). Хоч і в чомусь подібний на редактори, що дозволяють редагування за сценарієм (такі як ed(1), наприклад), sed працює шляхом тільки одноразового проходження через ввід, а отже ефективніший. Але здатність sed фільтрувати текст, що надійшов з конвеєру, виділяє його серед інших типів редакторів.

sed можна викликати з наступними опціями:

-n, --quiet, --silent : Пригнічує звичайний вивід.

-e script, --expression=script : Додати сценарій script до списку виконуваних команд.

-f script-file, --file=script-file : Додати зміст файлу script-file до списку виконуваних команд.

-i[suffix], --in-place[=suffiх] : Редагує файли на місці (робить резервні копії, якщо вказано закінчення файлу suffix).

-l N, --line-length=N : Вказує бажану довжину завертання рядка для команди l.

-r, --regexp-extended : Використає розширені регулярні вирази в сценарії.

-s, --separate : Розгляне файли як відокремленні замість одного неперервного потоку.

-u, --unbuffered : Завантажить мінімальну кількість даних з ввідних файлів і звільнятиме буфери виводу частіше.

--help : Виведе допомогу по вживанню програми.

-V : Виведе інформацію про версію програми.

Якщо на командному рядкові не вказано опцій -e, --expression, -f або --file, тоді найперший аргумент, що не являється опцією буде взято як сценарій для інтерпретації редактором sed. Решта аргументів вважатимуться назвами файлів; якщо не вказано жодного файлу вводу, тоді читатиметься стандартний ввід.

Огляд команд

Наступне являється стислим оглядом команд sed як довідник для тих, хто вже знає sed; для докладнішого опису слід звернутися до іншої документації (скажімо, докумет у texinfo форматі).

Команди без адреси

: label: Мітка label для команд b та t.

# comment : Коментар comment, що простягнеться до наступного нового рядка (або кінця відрізку сценарію, що слідує за -e).

} : Закриваюча дужка блоку { }.

Команди без адреси або з однією адресою

= : Вивести номер поточного рядка.

*a *
text : Додати текст text, що матиме кожен знак нового рядка екрановано зворотнім слешом.

*i *
text : Вставити текст text, що матиме кожний знак нового рядка екрановано зворотнім слешом.

q : Негайно завершити сценарій sed без подальшої обробки вводу, за винятком, коли не вимкнено автоматичного виводу, поточні рядки буде виведено.

Q : Негайно завершити роботу sed-сценарію без обробки додаткового вводу.

r filename : Додати текст, прочитаний із файлу filename.

R filename : Додати рядок, прочитаний із файлу filename.

Команди, що дозволяють діапазон адрес

{ : Розпочинає блок команд (завершується відповідною }).

b label : Перескочити до мітки label; якщо мітку опущено, перейде до кінця сценарію.

t label : Якщо s/// здійснила вдалу заміну, з тих пір як було прочитано останній рядок вводу і з часу виконання останньої команди t або T, тоді перескочити до мітки label; якщо мітку опущено, перейти до кінця сценарію.

T label : Якщо s/// не здійснила вдалої заміни, з тих пір як було прочитано останній рядок вводу і з часу виконання останньої команди t або T, тоді перескочити до мітки label; якщо мітку опущено, перейти до кінця сценарію.

*c *
text : Замінить обрані рядки на текст text, що матиме кожний знак нового рядка екрановано зворотнім слешом.

d : Видалить те що співпало зі зразком, розпочне наступний цикл.

D : Видалить до першого знаку нового рядка серед того, що співпало зі зразком. Розпочне наступний цикл, але запобігатиме читанню вводу, якщо залишились дані в області співпадання.

h H : Копіює/додає область співпадання до області зберігання.

g G : Копіює/додає область зберігання до області співпадання.

x : Поміняти місцями область зберігання і область співпадання.

l : Оголосити поточний рядок у "візуально-неоднозначній" формі.

n N : Прочитати/додати наступний рядок до області співпадання.

p : Вивести поточну область співпадання.

P : Вивести поточну область співпадання до першого ж знаку нового рядка.

s/regexp/replacement/ : Спробувати зіставити регулярний вираз regexp із областю співпадання. Якщо вдалося, замінити частину, що співпала виразом replacement . Вираз заміни може містити спеціальний знак &, що вказуватиме на ту частину області співпадання, яка збіглася, і спеціальні керовні послідовності \1 до \9 для посилання на відповідні підвирази що співпали з частинами regexp.

w filename : Записати поточну область співпадання до файлу filename.

W filename : Записати перший рядок поточної області співпадання до файлу filename.

y/source/dest/ : Здійснити транслітерацію знаків області співпадання, вказаних у source у відповідні знаки dest.

Адреси

Команди sed можуть бути заданими без адрес, в такому разі команди виконуються для всіх рядків вводу. Якщо задати одну адресу, команду буде виконано тільки для рядків вводу, що співпали з цією адресою. Якщо задати дві адреси, команди буде виконано для діапазону рядків, що співпали з першою до другої адреси, включно. Існує три речі, які варто зауважити щодо діапазонів адрес: синтаксис виглядатиме як addr1,addr2 (тобто адреси потрібно розділити комою); рядок, що відповідає addr1 завжди оброблятиметься, навіть якщо addr2 вказує на попередню адресу; і якщо addr2 - це регулярний вираз, він не зіставлятиметься з рядком, який співпав з addr1.

Після адреси (або діапазону адрес) можна добавити !, що вказуватиме, що команду слід виконати тільки в тому випадку, коли адреса (або діапазон адрес) не співпадає.

Підтримуються наступні типи адрес:

number : Співпаде тільки з рядком номер number.

first~step : Співпадатиме з кожною адресою на віддалі step рядків, починаючи з рядком first. Наприклад, "sef -n 1~2p" видрукує всі непарні рядки потоку вводу, тоді як 2~5 співпадатиме з кожним п'ятим рядком, починаючи з другого. (Ця риса являється розширенням.)

$ : Співпаде з останнім рядком.

/regexp/ : Співпаде з адресами рядків, що збігаються з регулярним виразом regexp.

\cregexp : Співпаде з адресами рядків, що збігаються з регулярним виразом regexp. c може бути будь-яким знаком.

sed GNU також підтримує спеціальні 2-адресні форми:

0,addr2 : Розпочати пошук уже в стані "першої адреси, яка вже співпала" до тих пір, доки знайдено addr2. Це аналогічно 1,addr1 за винятком того, що у випадку, коли addr2 співпаде з першим рядком вводу, то 0,addr2 форма буде в кінці діапазону, тоді як 1,addr2 все ще на його початку.

addr1,+N : Співпадае з адресою addr1 і наступними N рядками, що слідують за нею.

addr1,~N : Співпаде з addr1 рядками, що слідують за нею до рядка, кратного N.

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

Повинні підтримуватись POSIX.2 BRE, але не повністю через проблеми з ефективністю. Подлідовність \n в регулярних виразах співпадає зі знаком нового рядка, те саме стосується відповідних знаків для \a, \t та інших керівних послідовностей.

Вади

Надсилайте повідомлення про помилки на bonzini@gnu.org. Впевністься, що ви включили слово "sed" десь у полі "Subject:". Також, будь ласка, включіть вивід команди "sed --version" в тілі вашого повідомлення, якщо це можливо.

Дивіться також

awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info, будь-які з різноманітних книжок про sed, ЧАПи по sed (http://sed.sf.net/grabbag/tutorials/sedfaq.html), http://sed.sf.net/grabbag/.

Повна документація по sed підтримується як посібник Texinfo. Якщо програми info і sed встановлено на вашій системі, команда

 info sed

повинна надати вам доступ до повного посібника.