sed & awk / sed & awk: 5.1 О синтаксисе команд sed
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
До рассмотрения отдельных команд, вот несколько моментов для рассмотрения синтаксиса sed команд. Мы покрыли большую часть этого материала в прошлой главе. r0mk 13.02.13 в 09:24 |
|
|
Строка адреса опционально в любой команде. Это может быть шаблон, описанный регулярным выражением, окруженным слешами, номер строки или символ адресации в строке. Большинство команд могут понимать два адреса через запятую, которые указывают на диапозон строк. Для этих команд, обычно указывается: r0mk 13.02.13 в 09:27 |
||
|
[address]command r0mk 13.02.13 в 09:27 |
||
|
Несколько команд принемают только одиночный адрес. Они не могут быть применены к диапозону строк. Шаблон для них: r0mk 13.02.13 в 10:00 |
||
|
[line-address]command r0mk 13.02.13 в 10:00 |
||
|
Так же запомните, что команды могуть быть объединены фигурными скобками для одного адреса: r0mk 13.02.13 в 10:04 |
||
|
address { r0mk 13.02.13 в 10:04 |
||
|
command1 r0mk 13.02.13 в 10:04 |
||
|
command2 r0mk 13.02.13 в 10:04 |
||
|
command3 r0mk 13.02.13 в 10:04 |
||
|
} r0mk 13.02.13 в 10:04 |
||
|
Первая команда может быть помещена на ту же строку, что и открывающаяся скобка, но закрывающаяся скома должа быть в отдельной строке. Каждая команда может иметь собственный адрес и разрешены множественные уровни. Также, можно заменить отступ команд внутри скобок, пробелы и табуляции в начале строки разрешены. r0mk 13.02.13 в 10:07 |
||
|
Когда sed не может понять команду, он печатает сообщение "Команда искажена". Она маленькая синтаксическая ошибка это пробел после команды. Это не позволительно; конец команды должен быть в конце строки. r0mk 13.02.13 в 10:26 |
||
|
Доказательство этого ограничения описано как "недокументированная" особенность: множественные команды sed могуть помещены в одну строки если каждая из них отделена через точку с запятой.[1] Синтаксис следующего примера правильный: r0mk 13.02.13 в 10:28 |
||
|
[1] Удивительно, использование точки с запятой в качестве разделителя команд не задокументированно в POSIX стандарте. r0mk 13.02.13 в 10:29 |
||
|
n;d r0mk 13.02.13 в 10:29 |
||
|
Как правило, пробел после команды n вызывает синтаксическую ошибку. Помещение пробела перед командой d нормально. r0mk 13.02.13 в 10:30 |
||
|
Размещение множества команд в одной строке крайне обескураживает, потому, что sed скрипты достаточно сложны для чтения даже когда каждая команда написана в отдельной строке. ( Замететь, что команды изменения, вставки, добавления не должны быть использованы на одной строке.) r0mk 13.02.13 в 10:33 |
