sed & awk / sed & awk: 2.3 Использование sed
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Есть 2 способа вызова sed: или указать Ваши инструкции для редактирования в командной строке или поместить их в файл и подставить имя файла. r0mk 27.09.12 в 09:16 |
|
|
2.3.1 Написание простых инструкций r0mk 27.09.12 в 09:16 |
||
|
Вы можете написать простые команды редактирования в командной строке r0mk 27.09.12 в 09:16 |
||
|
sed [-e] 'инструкции' файл r0mk 27.09.12 в 09:17 |
||
|
Опция -е необходима только когда Вы подставляете больше одной инструкции в командной строке. Она говорит sed'у интерпретировать следующий аргумент как инструкцию. Когда инсрукция одиночная, sed может определить это сам. Давайте рассмотрим несколько примеров. r0mk 27.09.12 в 09:19 |
||
|
Воспользуемся простым входым файлом, списком, следующий пример использует команду замены для замены "MA" на "Massachusetts." r0mk 27.09.12 в 09:20 |
||
|
$ sed 's/MA/Massachusetts/' list r0mk 27.09.12 в 09:21 |
||
|
John Daggett, 341 King Road, Plymouth Massachusetts r0mk 27.09.12 в 09:21 |
||
|
Alice Ford, 22 East Broadway, Richmond VA r0mk 27.09.12 в 09:21 |
||
|
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK r0mk 27.09.12 в 09:21 |
||
|
Terry Kalkas, 402 Lans Road, Beaver Falls PA r0mk 27.09.12 в 09:21 |
||
|
Eric Adams, 20 Post Road, Sudbury Massachusetts r0mk 27.09.12 в 09:21 |
||
|
Hubert Sims, 328A Brook Road, Roanoke VA r0mk 27.09.12 в 09:21 |
||
|
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA r0mk 27.09.12 в 09:21 |
||
|
Sal Carpenter, 73 6th Street, Boston Massachusetts r0mk 27.09.12 в 09:21 |
||
|
Three lines are affected by the instruction but all lines are displayed. r0mk 27.09.12 в 09:21 |
||
|
Выделение инструкций в одиночные кавычки не обязательно в всех случаях, но Вам следует завести привычку всегда их ставить. Выделение одинарными кавычками предотвращает интерпретацию шеллом специальных символов или пробелов, найденых в инструкциях редатирования. (Шелл использует пробелы для разделения отдельных аргументов отправляемых программе; специальные символы шелла разворачиваются до вызова команды. r0mk 27.09.12 в 09:30 |
||
|
Например, первый пример можно использовать без них, но в следующем примере они необходимы, т.к. команда замены содержит пробелы: r0mk 27.09.12 в 09:32 |
||
|
$ sed 's/ MA/, Massachusetts/' list r0mk 27.09.12 в 09:26 |
||
|
John Daggett, 341 King Road, Plymouth, Massachusetts r0mk 27.09.12 в 09:32 |
||
|
Alice Ford, 22 East Broadway, Richmond VA r0mk 27.09.12 в 09:32 |
||
|
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK r0mk 27.09.12 в 09:33 |
||
|
Terry Kalkas, 402 Lans Road, Beaver Falls PA r0mk 27.09.12 в 09:33 |
||
|
Eric Adams, 20 Post Road, Sudbury, Massachusetts r0mk 27.09.12 в 09:33 |
||
|
Hubert Sims, 328A Brook Road, Roanoke VA r0mk 27.09.12 в 09:33 |
||
|
Amy Wilde, 334 Bayshore Pkwy, Mountain View CA r0mk 27.09.12 в 09:33 |
||
|
Sal Carpenter, 73 6th Street, Boston, Massachusetts r0mk 27.09.12 в 09:33 |
||
|
Для того, чтобы разместить запятую между городом и штатом, инструкция заменяет пробел перед двух буквенной абревиатурой на запятую и пробел. r0mk 28.09.12 в 07:18 |
||
|
Существует три способа указать множественные инструкции в командной строке: r0mk 28.09.12 в 07:19 |
||
|
1. Разделить инструкции через точку с запятой. r0mk 28.09.12 в 07:20 |
||
|
sed 's/ MA/, Massachusetts/; s/ PA/, Pennsylvania/' list r0mk 28.09.12 в 07:20 |
||
|
2. Перед каждой инструкцией написать -e. r0mk 28.09.12 в 07:21 |
||
|
sed -e 's/ MA/, Massachusetts/' -e 's/ PA/, Pennsylvania/' list r0mk 28.09.12 в 07:22 |
||
|
3. Использовать многострочную возможность Bourne шелла.[1] Нажать RETURN после ввода одиночной кавычки и вторая строка (>) будет показана для многострочного ввода. r0mk 28.09.12 в 07:24 |
||
|
[1] В наши дни, многие шеллы совместимы с Bourne shell и работают как показанные здесь: ksh, bash, pdksh, and zsh, и другие. r0mk 28.09.12 в 07:26 |
||
|
$ sed ' r0mk 28.09.12 в 07:26 |
||
|
> s/ MA/, Massachusetts/ r0mk 28.09.12 в 07:26 |
||
|
> s/ PA/, Pennsylvania/ r0mk 28.09.12 в 07:26 |
||
|
> s/ CA/, California/' list r0mk 28.09.12 в 07:26 |
||
|
John Daggett, 341 King Road, Plymouth, Massachusetts r0mk 28.09.12 в 07:26 |
||
|
Alice Ford, 22 East Broadway, Richmond VA r0mk 28.09.12 в 07:27 |
||
|
Orville Thomas, 11345 Oak Bridge Road, Tulsa OK r0mk 28.09.12 в 07:27 |
||
|
Terry Kalkas, 402 Lans Road, Beaver Falls, Pennsylvania r0mk 28.09.12 в 07:27 |
||
|
Eric Adams, 20 Post Road, Sudbury, Massachusetts r0mk 28.09.12 в 07:27 |
||
|
Hubert Sims, 328A Brook Road, Roanoke VA r0mk 28.09.12 в 07:27 |
||
|
Amy Wilde, 334 Bayshore Pkwy, Mountain View, California r0mk 28.09.12 в 07:27 |
||
|
Sal Carpenter, 73 6th Street, Boston, Massachusetts r0mk 28.09.12 в 07:27 |
||
|
Такая техника не будет работать в C shell. Вместо использования точки с запятой в конце каждой инструкции Вы можете вводить команды поверх многострочкости, завершая каждую строка бекслешем. (или Вы можете на время запустить Bourne shell введя sh и затем набрать команду.) r0mk 28.09.12 в 07:31 |
||
|
В показанном выше примере изменению подверглись пять строк и, разумеется, все строки были показаны. Запомните, что никаких изменений во входном файле не произошло. r0mk 28.09.12 в 07:32 |
||
|
2.3.1.1 Искажение команд r0mk 28.09.12 в 07:33 |
