sed & awk / sed & awk: 2.3 Использование sed

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

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

Есть 2 способа вызова sed: или указать Ваши инструкции для редактирования в командной строке или поместить их в файл и подставить имя файла.

r0mk 27.09.12 в 09:16

0

2.3.1 Написание простых инструкций

r0mk 27.09.12 в 09:16

0

Вы можете написать простые команды редактирования в командной строке

r0mk 27.09.12 в 09:16

0

sed [-e] 'инструкции' файл

r0mk 27.09.12 в 09:17

0

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

r0mk 27.09.12 в 09:19

0

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

r0mk 27.09.12 в 09:20

0

$ sed 's/MA/Massachusetts/' list

r0mk 27.09.12 в 09:21

0

John Daggett, 341 King Road, Plymouth Massachusetts

r0mk 27.09.12 в 09:21

0

Alice Ford, 22 East Broadway, Richmond VA

r0mk 27.09.12 в 09:21

0

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

r0mk 27.09.12 в 09:21

0

Terry Kalkas, 402 Lans Road, Beaver Falls PA

r0mk 27.09.12 в 09:21

0

Eric Adams, 20 Post Road, Sudbury Massachusetts

r0mk 27.09.12 в 09:21

0

Hubert Sims, 328A Brook Road, Roanoke VA

r0mk 27.09.12 в 09:21

0

Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

r0mk 27.09.12 в 09:21

0

Sal Carpenter, 73 6th Street, Boston Massachusetts

r0mk 27.09.12 в 09:21

0

Three lines are affected by the instruction but all lines are displayed.

r0mk 27.09.12 в 09:21

0

Выделение инструкций в одиночные кавычки не обязательно в всех случаях, но Вам следует завести привычку всегда их ставить. Выделение одинарными кавычками предотвращает интерпретацию шеллом специальных символов или пробелов, найденых в инструкциях редатирования. (Шелл использует пробелы для разделения отдельных аргументов отправляемых программе; специальные символы шелла разворачиваются до вызова команды.

r0mk 27.09.12 в 09:30

0

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

r0mk 27.09.12 в 09:32

0

$ sed 's/ MA/, Massachusetts/' list

r0mk 27.09.12 в 09:26

0

John Daggett, 341 King Road, Plymouth, Massachusetts

r0mk 27.09.12 в 09:32

0

Alice Ford, 22 East Broadway, Richmond VA

r0mk 27.09.12 в 09:32

0

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

r0mk 27.09.12 в 09:33

0

Terry Kalkas, 402 Lans Road, Beaver Falls PA

r0mk 27.09.12 в 09:33

0

Eric Adams, 20 Post Road, Sudbury, Massachusetts

r0mk 27.09.12 в 09:33

0

Hubert Sims, 328A Brook Road, Roanoke VA

r0mk 27.09.12 в 09:33

0

Amy Wilde, 334 Bayshore Pkwy, Mountain View CA

r0mk 27.09.12 в 09:33

0

Sal Carpenter, 73 6th Street, Boston, Massachusetts

r0mk 27.09.12 в 09:33

0

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

r0mk 28.09.12 в 07:18

0

Существует три способа указать множественные инструкции в командной строке:

r0mk 28.09.12 в 07:19

0

1. Разделить инструкции через точку с запятой.

r0mk 28.09.12 в 07:20

0

sed 's/ MA/, Massachusetts/; s/ PA/, Pennsylvania/' list

r0mk 28.09.12 в 07:20

0

2. Перед каждой инструкцией написать -e.

r0mk 28.09.12 в 07:21

0

sed -e 's/ MA/, Massachusetts/' -e 's/ PA/, Pennsylvania/' list

r0mk 28.09.12 в 07:22

0

3. Использовать многострочную возможность Bourne шелла.[1] Нажать RETURN после ввода одиночной кавычки и вторая строка (>) будет показана для многострочного ввода.

r0mk 28.09.12 в 07:24

0

[1] В наши дни, многие шеллы совместимы с Bourne shell и работают как показанные здесь: ksh, bash, pdksh, and zsh, и другие.

r0mk 28.09.12 в 07:26

0

$ sed '

r0mk 28.09.12 в 07:26

0

> s/ MA/, Massachusetts/

r0mk 28.09.12 в 07:26

0

> s/ PA/, Pennsylvania/

r0mk 28.09.12 в 07:26

0

> s/ CA/, California/' list

r0mk 28.09.12 в 07:26

0

John Daggett, 341 King Road, Plymouth, Massachusetts

r0mk 28.09.12 в 07:26

0

Alice Ford, 22 East Broadway, Richmond VA

r0mk 28.09.12 в 07:27

0

Orville Thomas, 11345 Oak Bridge Road, Tulsa OK

r0mk 28.09.12 в 07:27

0

Terry Kalkas, 402 Lans Road, Beaver Falls, Pennsylvania

r0mk 28.09.12 в 07:27

0

Eric Adams, 20 Post Road, Sudbury, Massachusetts

r0mk 28.09.12 в 07:27

0

Hubert Sims, 328A Brook Road, Roanoke VA

r0mk 28.09.12 в 07:27

0

Amy Wilde, 334 Bayshore Pkwy, Mountain View, California

r0mk 28.09.12 в 07:27

0

Sal Carpenter, 73 6th Street, Boston, Massachusetts

r0mk 28.09.12 в 07:27

0

Такая техника не будет работать в C shell. Вместо использования точки с запятой в конце каждой инструкции Вы можете вводить команды поверх многострочкости, завершая каждую строка бекслешем. (или Вы можете на время запустить Bourne shell введя sh и затем набрать команду.)

r0mk 28.09.12 в 07:31

0

В показанном выше примере изменению подверглись пять строк и, разумеется, все строки были показаны. Запомните, что никаких изменений во входном файле не произошло.

r0mk 28.09.12 в 07:32

0

2.3.1.1 Искажение команд

r0mk 28.09.12 в 07:33

0
Минутку...

Следующая страница →