Назва
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
повинна надати вам доступ до повного посібника.