sed & awk / sed & awk: 2.2 Синтаксис командной строки
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Вызов sed и awk очень похожий. Синтаксис следующий: r0mk 24.09.12 в 10:59 |
|
|
команда [опции] имя_скрипта r0mk 24.09.12 в 10:55 |
||
|
Как и большинство UNIX програм, sed и awk могут брать данные со стандартного входа и отправлять на стандартный вывод. Если имя файла указано, то входные данные берутся из файла. Вывод содержит обработанную информацию. Стандартный выход - это прямо на экран и обычно вывод программ происходит прямо тут же. Он так же может быть направлен в файл используя I/O переадресацию в шелле, но он должен отличаться от входного файла программы. r0mk 27.09.12 в 05:15 |
||
|
Опции для каждой команды разные. Мы покажем многие из этих опций в следующих главах. (Полный список опций для sed можно найти в Приложении А, Краткий справочник по sed; Полный список опций для awk в Приложении B, Краткий справочник по awk.) r0mk 27.09.12 в 05:17 |
||
|
В скрипте написано, какие инструкции выполнять. Если скрипт командной строке, он должен быть выделен одинарными кавычками, если он содержит пробели или любой символ, который может быть обработан шеллом($ и * например). r0mk 27.09.12 в 05:20 |
||
|
Одна опция является общей для sed и awk, это опция -f, которая позволяет Вам указать имя скрипта. С ростом скрипта в размере, он помещается в файл. Таким образом, Вы можете вызвать sed следующим образом: r0mk 27.09.12 в 05:24 |
||
|
sed -f имя_скрипта входной_файл r0mk 27.09.12 в 05:25 |
||
|
Рисунок 2.1 показывает основные операции sed и awk. Каждая программа читает одну входную строку за раз из входного файла, создает копию входной строки, и выполняет инструкции, описанные в скрипте, над копией. Таким образом, изменения сделанные над входной строкой не применяются на входном файле. r0mk 27.09.12 в 05:28 |
||
|
Рисунок 2.1: Как sed и awk работают. r0mk 27.09.12 в 05:29 |
||
|
2.2.1 Написание скриптов r0mk 27.09.12 в 05:29 |
||
|
В скрипте Вы говорите программе, что она должна делать. Требуется хотя бы одна строка инструкций. Короткие скрипты могут быть указанны в командной строке; более длинные обычно помещаются в файл, где они могут быть легко проверены и протестированны. При написании скрипта, держите в уме последовательность исполняемых инструкций и как каждая из инструкций изменяет входной файл. r0mk 27.09.12 в 05:33 |
||
|
В sed и awk каждая инструкция состоит из двух частей: шаблон и процедура. Шаблон это регулярное выражение отделенное слешами(/). Процедура описывает одно и более действий для выполнения. r0mk 27.09.12 в 05:35 |
||
|
Каждая входная строка читается, программа читает первую инструкцию в скрипте и проверяет текущую строку на наличие шаблона. Если шаблон не найдет, то процедура игнорируется и читается следующая инструкция. Если совпадение с шаблоном есть, то действие или действия, указанные в процедуре, выполняются. Читаются все инструкции, а не только первая инстуркция, которая которая совпала по шаблону с входной строкой. r0mk 27.09.12 в 05:42 |
||
|
Когда все применимые инструкции были выполнены и применнины к одной строке, sed выводит строку и повторяет цикл для каждой входной строки. Awk, наоборот, не выводит строки автоматически; инструкции в Вашем скрипте контролируют, что в итоге с ними сделать. r0mk 27.09.12 в 05:45 |
||
|
Содержание процедур sed и awk очень разное. В sed процедуры содержат команды редактирования, которые используются в строковых редакторах. Большинство команд состоят из одной буквы. r0mk 27.09.12 в 05:46 |
||
|
В awk процедуры состоят из програмных операторов и функций. Процедура должна быть выделена фигурными скобками. r0mk 27.09.12 в 05:48 |
||
|
В следующем разделе мы рассмотрим несколько скриптов, которые обрабатывают простой список рассылки. r0mk 27.09.12 в 05:49 |
||
|
2.2.2 Простой список рассылки r0mk 27.09.12 в 05:49 |
||
|
В следующих разделах в примерах используется простой файл, называемый списком. Он содержит список имен и адресов, как показано ниже. r0mk 27.09.12 в 05:54 |
||
|
$ cat list r0mk 27.09.12 в 05:54 |
||
|
John Daggett, 341 King Road, Plymouth MA r0mk 27.09.12 в 05:55 |
||
|
Alice Ford, 22 East Broadway, Richmond VA r0mk 27.09.12 в 05:55 |
||
|
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK r0mk 27.09.12 в 05:55 |
||
|
Terry Kalkas, 402 Lans Road, Beaver Falls PA r0mk 27.09.12 в 05:55 |
||
|
Eric Adams, 20 Post Road, Sudbury MA r0mk 27.09.12 в 05:55 |
||
|
Hubert Sims, 328A Brook Road, Roanoke VA r0mk 27.09.12 в 05:55 |
||
|
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA r0mk 27.09.12 в 05:55 |
||
|
Sal Carpenter, 73 6th Street, Boston MA r0mk 27.09.12 в 05:55 |
||
|
Если хотите, создайте этот файл на Вашей системе или используйте подобный, созданный Вами. Так как многие из примеров в этой главе короткие и интерактивные, Вы можете ввести их с клавиатуры и подтвердить результат. r0mk 27.09.12 в 05:57 |
