sed & awk / sed & awk: 2.2 Синтаксис командной строки

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

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

Вызов sed и awk очень похожий. Синтаксис следующий:

r0mk 24.09.12 в 10:59

0

команда [опции] имя_скрипта

r0mk 24.09.12 в 10:55

0

Как и большинство UNIX програм, sed и awk могут брать данные со стандартного входа и отправлять на стандартный вывод. Если имя файла указано, то входные данные берутся из файла. Вывод содержит обработанную информацию. Стандартный выход - это прямо на экран и обычно вывод программ происходит прямо тут же. Он так же может быть направлен в файл используя I/O переадресацию в шелле, но он должен отличаться от входного файла программы.

r0mk 27.09.12 в 05:15

0

Опции для каждой команды разные. Мы покажем многие из этих опций в следующих главах. (Полный список опций для sed можно найти в Приложении А, Краткий справочник по sed; Полный список опций для awk в Приложении B, Краткий справочник по awk.)

r0mk 27.09.12 в 05:17

0

В скрипте написано, какие инструкции выполнять. Если скрипт командной строке, он должен быть выделен одинарными кавычками, если он содержит пробели или любой символ, который может быть обработан шеллом($ и * например).

r0mk 27.09.12 в 05:20

0

Одна опция является общей для sed и awk, это опция -f, которая позволяет Вам указать имя скрипта. С ростом скрипта в размере, он помещается в файл. Таким образом, Вы можете вызвать sed следующим образом:

r0mk 27.09.12 в 05:24

0

sed -f имя_скрипта входной_файл

r0mk 27.09.12 в 05:25

0

Рисунок 2.1 показывает основные операции sed и awk. Каждая программа читает одну входную строку за раз из входного файла, создает копию входной строки, и выполняет инструкции, описанные в скрипте, над копией. Таким образом, изменения сделанные над входной строкой не применяются на входном файле.

r0mk 27.09.12 в 05:28

0

Рисунок 2.1: Как sed и awk работают.

r0mk 27.09.12 в 05:29

0

2.2.1 Написание скриптов

r0mk 27.09.12 в 05:29

0

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

r0mk 27.09.12 в 05:33

0

В sed и awk каждая инструкция состоит из двух частей: шаблон и процедура. Шаблон это регулярное выражение отделенное слешами(/). Процедура описывает одно и более действий для выполнения.

r0mk 27.09.12 в 05:35

0

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

r0mk 27.09.12 в 05:42

0

Когда все применимые инструкции были выполнены и применнины к одной строке, sed выводит строку и повторяет цикл для каждой входной строки. Awk, наоборот, не выводит строки автоматически; инструкции в Вашем скрипте контролируют, что в итоге с ними сделать.

r0mk 27.09.12 в 05:45

0

Содержание процедур sed и awk очень разное. В sed процедуры содержат команды редактирования, которые используются в строковых редакторах. Большинство команд состоят из одной буквы.

r0mk 27.09.12 в 05:46

0

В awk процедуры состоят из програмных операторов и функций. Процедура должна быть выделена фигурными скобками.

r0mk 27.09.12 в 05:48

0

В следующем разделе мы рассмотрим несколько скриптов, которые обрабатывают простой список рассылки.

r0mk 27.09.12 в 05:49

0

2.2.2 Простой список рассылки

r0mk 27.09.12 в 05:49

0

В следующих разделах в примерах используется простой файл, называемый списком. Он содержит список имен и адресов, как показано ниже.

r0mk 27.09.12 в 05:54

0

$ cat list

r0mk 27.09.12 в 05:54

0

John Daggett, 341 King Road, Plymouth MA

r0mk 27.09.12 в 05:55

0

Alice Ford, 22 East Broadway, Richmond VA

r0mk 27.09.12 в 05:55

0

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

r0mk 27.09.12 в 05:55

0

Terry Kalkas, 402 Lans Road, Beaver Falls PA

r0mk 27.09.12 в 05:55

0

Eric Adams, 20 Post Road, Sudbury MA

r0mk 27.09.12 в 05:55

0

Hubert Sims, 328A Brook Road, Roanoke VA

r0mk 27.09.12 в 05:55

0

Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

r0mk 27.09.12 в 05:55

0

Sal Carpenter, 73 6th Street, Boston MA

r0mk 27.09.12 в 05:55

0

Если хотите, создайте этот файл на Вашей системе или используйте подобный, созданный Вами. Так как многие из примеров в этой главе короткие и интерактивные, Вы можете ввести их с клавиатуры и подтвердить результат.

r0mk 27.09.12 в 05:57

0
Минутку...