Database |
Size (MB) |
Date created |
GOSOUTH |
2244 5632 |
12/11/9? 8/9/99 |
TRISUD |
(2 rows affected) Из этой информации нас, предположим, интересуют только имена баз данных, находящиеся в первой колонке. Чтобы их извлечь, необходимо выполнить следующую последовательность действий:
1. Удалить пунктирную линию с помощью команды s/--*//g.
2. Удалить все пустые строки с помощью команды /^$/d.
3. Удалить последнюю строку с помощью команды $d.
4. Удалить первую строку с помощью команды 1d.
5. Отобразить первый столбец с помощью команды awk '{print $1}'. Ниже приведена соответствующая цепочка команд:
$ sed 's/--*//g' -e '/^$/d' -e '$d' -e '1d' sql.txt | awk '{print $1}'
GOSOUTH TRISUD
10.16.3. Добавление текста
В процессе потоковой обработки файла мне иногда требуется добавить к каждой проверенной строке какой‑нибудь текст, сообщающий о том, как прошла обработка. Предположим, имеется такой файл:
$ cat ok.txt
АС456
АС492169
АС9967
АС88345
Наша задача состоит в добавлении слова "Passed" (обработано) в конец каждой строки. Решить ее несложно. Достаточно в шаблоне поиска указать метасимвол '$', означающий конец строки, а в шаблоне замены — пробел и искомое слово:
$ sed 's/$/ Passed/' ok.txt
АС456 Passed
АС492169 Passed
AC9967 Passed
AC8B345 Passed
10.16.4. Удаление начальной косой черты в путевом имени
Ниже показано, как с помощью редактора sed можно быстро удалить начальную косую черту из имени текущего каталога:
$ cd /usr/local
$ echo $PWD | sed 's/^\///g'
usr/local
Имя текущего каталога хранится в переменной среды Spwd. Эта переменная обновляется всякий раз, когда выполняется команда cd. Команда echo передает значение переменной по каналу редактору sed, который выполняет несложную обработку: находит в начале строки (метасимвол '^'( символ косой черты (защищен от интерпретации обратной косой чертой) и заменяет его пустой подстрокой.
10.17. Заключение
Редактор sed является эффективным инструментом фильтрации текста. Он дает возможность находить во входном потоке требуемые строки и последовательности символов и модифицировать их с наименьшими затратами времени и усилий. Как было показано, для извлечения из файлов требуемой информации вовсе не обязательно прибегать к написанию больших сценариев.
В этой главе мы коснулись лишь основ работы с sed, но даже подученных знаний достаточно, чтобы с помощью sed решать многие задачи, возникающие в процессе обработки текста.
ГЛАВА 11
Дополнительные утилиты работы с текстом
Существует большое количество утилит, предназначенных для сортировки, объединения, разбиения и прочей обработки текстовых файлов. В этой главе мы познакомимся с такими командами:
• sort;
• uniq;
• join;
• cut;
• paste;
• split,
11.1. Сортировка файлов с помощью команды sort
Команда sort позволяет выполнять сортировку входного потока по различным полям (ключам сортировки). Это довольно мощная команда, которая весьма полезна при обработке журнальных файлов или реорганизации текстовых столбцов в файлах. В то же время следует быть внимательным при использовании ее многочисленных опций, так как зачастую можно получить неожиданные результаты. Не всегда понятна связь между указанной опцией и результатами, возвращаемыми командой sort. Некоторые опции перекрывают друг друга и, таким образом, допускают неоднозначную трактовку.
Мы не станем вдаваться в детали различных алгоритмов сортировки и рассматривать все возможные комбинации опций команды sort. Будут описаны лишь важнейшие из опций и представлены многочисленные примеры, позволяющие разобраться в особенностях функционирования этой команды.
11.1.1. Опции команды sort
Команда sort имеет следующий формат:
sort [опции] [входные_файлы]
Команда выполняет конкатенацию указанных входных файлов, сортирует полученный текст и записывает результат в стандартный выходной поток. Если файлы не указаны, ожидается ввод данных с клавиатуры.
Таблица 11.1. Основные опции команды sort
| -с | Проверка того, отсортирован ли файл; сортировка не производится |
| -m | Объединение отсортированных файлов; сортировка не производится |
| -u | Удаление повторяющихся строк |
| -о | Вывод результата не на экран, а в указанный файл |
| -b | Игнорирование начальных пробелов в полях сортировки |
| -n | Включение режима числовой сортировки |
| -t | Задание разделителя полей |
| -r | Сортировка в обратном порядке |
| +поз1[-поз2] | Ключом сортировки становится строка, начинающаяся в позиции |
| поз1 и заканчивающаяся перед позицией поз2 (или в конце текущей строки, если второй параметр не указан)*; номера полей и позиции начальных символов отсчитываются от нуля | |
| -k поз1[, поз2] | Ключом сортировки становится строка, начинающаяся в позиции |
| поз1 и заканчивающаяся в позиции поз2 (или в конце текущей строки, если второй параметр не указан)[2]; номера полей и позиции начальных символов отсчитываются от единицы | |
| -n | Поле с номером я не должно сортироваться; значение n отсчитывается от нуля |
2
Позиция задастся следующим образом: f[.c], где f— номер поля, c— позиция первого символа ключа от начала поля. Если параметр c не указан, первым символом ключа считается первый символ поля.