sed & awk / sed & awk: 5.1 О синтаксисе команд sed

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

До рассмотрения отдельных команд, вот несколько моментов для рассмотрения синтаксиса sed команд. Мы покрыли большую часть этого материала в прошлой главе.

r0mk 13.02.13 в 09:24

0

Строка адреса опционально в любой команде. Это может быть шаблон, описанный регулярным выражением, окруженным слешами, номер строки или символ адресации в строке. Большинство команд могут понимать два адреса через запятую, которые указывают на диапозон строк. Для этих команд, обычно указывается:

r0mk 13.02.13 в 09:27

0

[address]command

r0mk 13.02.13 в 09:27

0

Несколько команд принемают только одиночный адрес. Они не могут быть применены к диапозону строк. Шаблон для них:

r0mk 13.02.13 в 10:00

0

[line-address]command

r0mk 13.02.13 в 10:00

0

Так же запомните, что команды могуть быть объединены фигурными скобками для одного адреса:

r0mk 13.02.13 в 10:04

0

address {

r0mk 13.02.13 в 10:04

0

command1

r0mk 13.02.13 в 10:04

0

command2

r0mk 13.02.13 в 10:04

0

command3

r0mk 13.02.13 в 10:04

0

}

r0mk 13.02.13 в 10:04

0

Первая команда может быть помещена на ту же строку, что и открывающаяся скобка, но закрывающаяся скома должа быть в отдельной строке. Каждая команда может иметь собственный адрес и разрешены множественные уровни. Также, можно заменить отступ команд внутри скобок, пробелы и табуляции в начале строки разрешены.

r0mk 13.02.13 в 10:07

0

Когда sed не может понять команду, он печатает сообщение "Команда искажена". Она маленькая синтаксическая ошибка это пробел после команды. Это не позволительно; конец команды должен быть в конце строки.

r0mk 13.02.13 в 10:26

0

Доказательство этого ограничения описано как "недокументированная" особенность: множественные команды sed могуть помещены в одну строки если каждая из них отделена через точку с запятой.[1] Синтаксис следующего примера правильный:

r0mk 13.02.13 в 10:28

0

[1] Удивительно, использование точки с запятой в качестве разделителя команд не задокументированно в POSIX стандарте.

r0mk 13.02.13 в 10:29

0

n;d

r0mk 13.02.13 в 10:29

0

Как правило, пробел после команды n вызывает синтаксическую ошибку. Помещение пробела перед командой d нормально.

r0mk 13.02.13 в 10:30

0

Размещение множества команд в одной строке крайне обескураживает, потому, что sed скрипты достаточно сложны для чтения даже когда каждая команда написана в отдельной строке. ( Замететь, что команды изменения, вставки, добавления не должны быть использованы на одной строке.)

r0mk 13.02.13 в 10:33

0
Минутку...