sed & awk / sed & awk: 4.4 Четыре вида sed скриптов
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
В этом разделе, мы рассмотрим четыре типа скриптов, каждый из которых показывает обычные приложения sed. r0mk 10.01.13 в 05:23 В этом разделе, мы рассмотрим четыре типа скриптов, каждый из которых демонстрирует типичные приложения sed. setevoy 03.02.13 в 17:16 |
|
|
4.4.1 Множественное редактирование одного файла r0mk 11.01.13 в 04:29 |
||
|
Первый тип скриптов демонстрирует производство серии изменений в файле. Например, мы используем скрипт для конвертирования файла, созданного в программе обработке текста, в файле закодированном для troff. r0mk 11.01.13 в 04:32 |
||
|
Однажды один из авторов писал проект для компьютерной компании, здесь называется BigOne Computer. Документ должен включать краткое описание продукта для "Horsefeathers Software". Компания пообещала, что описание продукта будет онлайн и они отправят его. К несчастью, когда файл пришел, он содержал форматированый вывод для принтера, единственный вариант предоставления. Часть файла (сохраненная для тестов, названная horsefeathers) далее. r0mk 11.01.13 в 04:40 Однажды один из авторов писал проект для компьютерной компании, здесь называется BigOne Computer. Документ должен включать краткое описание продукта для "Horsefeathers Software". Компания пообещала, что описание продукта будет онлайн и они отправят его. К несчастью, когда файл пришел, он содержал единственный вариант предоставления - форматированый вывод для принтера. Часть файла (сохраненная для тестов и названная horsefeathers) предоставлена далее. setevoy 03.02.13 в 17:20 |
||
|
HORSEFEATHERS SOFTWARE PRODUCT BULLETIN r0mk 11.01.13 в 04:40 |
||
|
DESCRIPTION r0mk 11.01.13 в 04:40 |
||
|
+ ___________ r0mk 11.01.13 в 04:40 |
||
|
BigOne Computer offers three software packages from the suite r0mk 11.01.13 в 04:40 |
||
|
of Horsefeathers software products -- Horsefeathers Business r0mk 11.01.13 в 04:40 |
||
|
BASIC, BASIC Librarian, and LIDO. These software products can r0mk 11.01.13 в 04:40 |
||
|
fill your requirements for powerful, sophisticated, r0mk 11.01.13 в 04:41 |
||
|
general-purpose business software providing you with a base for r0mk 11.01.13 в 04:41 |
||
|
software customization or development. r0mk 11.01.13 в 04:41 |
||
|
Horsefeathers BASIC is BASIC optimized for use on the BigOne r0mk 11.01.13 в 04:41 |
||
|
machine with UNIX or MS-DOS operating systems. BASIC Librarian r0mk 11.01.13 в 04:41 |
||
|
is a full screen program editor, which also provides the ability r0mk 11.01.13 в 04:41 |
||
|
Обратите внимание, что в текст добавлены пробелы между словами. Так же пробелы добавлены для создания отступа слева. r0mk 11.01.13 в 04:43 |
||
|
Мы решили, что начнем решение проблемы с использованием sed, и лучше если сделать умственный список вещей, которые мы хотим реализовать. Когда начали программировать, мы написали скрипт, содержащий одиночные команды, которые делали одно дело. Убедились, что это работает, затем добавили другие команды и повторяли этот цикл до того, как добились всех очевидных задач. ("Всех очевидных" потоме, что список не всегда полный и цикл реализаци-обновление добавляет новые пункты в список.) r0mk 11.01.13 в 05:16 Мы решили, что прежде, чем мы попробуем найти решение этой проблемы с помощью sed - лучше мысленно состовить список действий, которые мы собираемся предпринять. КОгда мы начали писать код, мы написали скрипт, который содержал всего одну команду и должен был выполнить только одну вещь. Првоерили, что он работает и добавили ещё одну команду и повторяли этот процесс до тех пор, пока не добились желаемых результатов. ... setevoy 03.02.13 в 17:29 |
||
|
Этот процесс работы может показать утомительным, и действительно существуют сценарии где это уместно взять и написать весь скрипт за раз и затем начать его тестировать. Обычно, техника один-шаг-за-раз высоко рекомендована для новичков потому, что изолируется каждая команда и проще увидеть, что работает, а что нет. Когда Вы пробуете сделать несколько команд за раз, можно обнаружить, что в случае возникновения проблемы Вы воссоздаете рекомендованный процесс в обратном направлении; удаляя команды по одной до нахождения проблемы. r0mk 11.01.13 в 05:25 |
||
|
Вот список очевидных редактирований, которые должны быть сделаны для описания Horsefeathers Software: r0mk 11.01.13 в 05:26 |
||
|
1. Заменить все пустые строка на пункт макроса (.LP). r0mk 11.01.13 в 05:26 |
||
|
2. Удалить все начальные пробелы из каждой строки r0mk 11.01.13 в 05:28 |
||
|
3. Удалить подчеркивающую линию для принтера, которая начинается с "+" r0mk 11.01.13 в 05:29 |
||
|
4. Удалить множественные пробелы добавленные между строк. r0mk 11.01.13 в 05:30 |
||
|
Первое редактирование требует найти пустые строки. Как правило, при взгляде на входной файл не очевидно где пустые строки имеют предшествующие пробелы, а где нет. Как оказалось их нет, таким образом пустые строки соответствуют шаблону "^$". (Если бы были пробелы в строке, шаблон был бы написан "^*$".) Таким образом, первое редактирование довольно просто для исполнения: r0mk 11.01.13 в 05:34 |
||
|
s/^$/.LP/ r0mk 11.01.13 в 05:34 |
||
|
Оно заменяет каждую пустую строку на ".LP". Обратите внимание, что мы не выделяем точку в разделе подстановки, команды замены. Мы можем поместить эту команду в файл sedscr и проверить команду следующим побразом: r0mk 11.01.13 в 05:37 |
||
|
$ sed -f sedscr horsefeathers r0mk 11.01.13 в 05:37 |
||
|
HORSEFEATHERS SOFTWARE PRODUCT BULLETIN r0mk 11.01.13 в 05:37 |
||
|
.LP r0mk 11.01.13 в 05:37 |
||
|
DESCRIPTION r0mk 11.01.13 в 05:37 |
||
|
+ ___________ r0mk 11.01.13 в 05:37 |
||
|
.LP r0mk 11.01.13 в 05:37 |
||
|
BigOne Computer offers three software packages from the suite r0mk 11.01.13 в 05:37 |
||
|
of Horsefeathers software products -- Horsefeathers Business r0mk 11.01.13 в 05:37 |
||
|
BASIC, BASIC Librarian, and LIDO. These software products can r0mk 11.01.13 в 05:37 |
||
|
fill your requirements for powerful, sophisticated, r0mk 11.01.13 в 05:37 |
||
|
general-purpose business software providing you with a base for r0mk 11.01.13 в 05:37 |
||
|
software customization or development. r0mk 11.01.13 в 05:38 |
||
|
.LP r0mk 11.01.13 в 05:38 |
||
|
Horsefeathers BASIC is BASIC optimized for use on the BigOne r0mk 11.01.13 в 05:38 |
||
|
machine with UNIX or MS-DOS operating systems. BASIC Librarian r0mk 11.01.13 в 05:39 |
||
|
is a full screen program editor, which also provides the ability r0mk 11.01.13 в 05:39 |
||
|
Прекрастно видно, какая строка была изменена. ( Часто удобно вырезать часть файла для использования его для проверок. Это лучше работает если часть достаточно маленькая для помещения на экран и достаточно большая для влючения разных примеров того, что нужно изменить. После успешного применения редактирования на тестовом файле, вторым уровнем проверки будет, когда Вы примените его на оригинальном файле.) r0mk 11.01.13 в 05:42 |
||
|
Следующее редактирование, которые мы сделаем удалит строки, начинающиеся с "+" и содержащие подчеркивание. Мы можем просто удалить эти строки, используя команду удаления, d. При написании шаблона для поиска этих строк, мы имеем несколько вариантов. Каждая строка будет соответствовать: r0mk 11.01.13 в 05:48 |
||
|
/^+/ r0mk 11.01.13 в 05:48 |
||
|
/^+/ r0mk 11.01.13 в 06:14 |
||
|
/^+*/ r0mk 11.01.13 в 06:14 |
||
|
/^+*__*/ r0mk 11.01.13 в 06:14 |
||
|
Как можно видеть, каждое следующее регулярное выражение соответствует большему числу символов. Только через проверки можно определить насколько полно выражение соответствует указанной строке и не соответствует другим. Чем больше шаблон описанный в регулярном выражении, тем удобней понять, что он производит нежелательные совпадения. Для этого скрипта, мы выберем третье выражение: r0mk 11.01.13 в 06:35 |
