sed и awk (учебное пособие)
А.Соловьев, сервер Nevod Ltd.
В начало страницы
sed [ -n ] [ -e script ] [ -f sfile ] [ files ]
Команда копирует файлы (по умолчанию со стандартного
входа) на стандартный выход, редактирует их в соответствии со
своими(!) командами, размещенными в "script" (в командном
файле или строке редактора [а не shell!]). По флагу "-f"
берет берет файл команд из файла "sfile"; Если есть
только опция "-e script", то флаг "-e" можно
опустить. Флаг "-n" подавляет вывод (происходящий по
умолчанию). "script" состоит из команд редактирования,
по одной в строке, имеющих формат:
[ addr [ , addr ] ] cmd [ args ]
"sed" циклически преобразует входные строки
в выходные.
Адреса "[ addr [ , addr ] ]" - это либо
номера строк, либо последняя строка (символ "$"), либо
регулярные выражения в стиле редактора "ed":
- "\" используется в многострочных командах
для экранирования продолжения строки.
- "." совпадает с любым символом.
- Если адреса не указаны - просматриваются все входные
строки.
- Если один адрес, то выбираются совпадающие строки.
- Если заданы два адреса, выбираются строки в заданном
интервале.
- "!cmd" выполняется команда "cmd",
для строк, которые не были выбраны по адресам.
Для следующих (основных) функций (команд) максимальное
число допустимых адресов указано в скобках.
В начало страницы
Команда:
who
Результат:
root tty1 Mar 13 17:23
mas tty2 Mar 13 18:50
sae tty6 Mar 13 17:24
sae tty5 Mar 13 17:24
Пример:
who | sed '2a\
новая строка
'
Результат:
root tty1 Mar 13 17:23
mas tty2 Mar 13 18:50
новая строка
sae tty6 Mar 13 17:24
sae tty5 Mar 13 17:24
В начало страницы
Если метка ("label") отсутствует,
то переход на конец командного файла.
Пример:
who | sed '2a\
новая строка
b lb
2d
: lb 3d
'
Результат:
root tty1 Mar 13 17:23
mas tty2 Mar 13 18:50
новая строка
sae tty5 Mar 13 17:24
В начало страницы
Пример:
who | sed '/sae/ c\
cтрока замены
'
Результат:
root tty1 Mar 13 17:23
mas tty2 Mar 13 18:50
строка замены
строка замены
В начало страницы
Пример:
who | sed '2,4d'
Результат:
root tty1 Mar 13 17:23
В начало страницы
Пример:
who | sed '2i\
новая строка
'
Результат:
root tty1 Mar 13 17:23
новая строка
mas tty2 Mar 13 18:50
sae tty6 Mar 13 17:24
sae tty5 Mar 13 17:24
В начало страницы
В начало страницы
g глобально (по всей строке)
p выводить замены
w wfile сохранять заменяемое в "wfile".
Пример:
who | sed 's/t/T/'
echo
who | sed 's/t/T/g'
Результат:
rooT tty1 Mar 13 17:23
mas Tty2 Mar 13 18:50
sae Tty6 Mar 13 17:24
sae Tty5 Mar 13 17:24
rooT TTy1 Mar 13 17:23
mas TTy2 Mar 13 18:50
sae TTy6 Mar 13 17:24
sae TTy5 Mar 13 17:24
В начало страницы
Длины строк должны быть одинаковыми.
Пример:
who | sed 'y/sae/SAE/'
Результат:
root tty1 MAr 13 17:23
mAS tty2 MAr 13 18:50
SAE tty6 MAr 13 17:24
SAE tty5 MAr 13 17:24
В начало страницы
Пример:
who | sed '2,4!d'
Результат:
mas tty2 Mar 13 18:50
sae tty6 Mar 13 17:24
sae tty5 Mar 13 17:24
В начало страницы
Пример:
who | sed =
Результат:
1
root tty1 Mar 13 17:23
2
mas tty2 Mar 13 18:50
3
sae tty6 Mar 13 17:24
4
sae tty5 Mar 13 17:24
(2){ } Скобки группируют команды.