Застосування регулярних виразів для обробки тексту. Потоковий текстовий редактор SED. Опис опцій, адресація приклади
Sed -- это неинтерактивный строчный редактор. Он принимает текст либо с устройства stdin, либо из текстового файла, выполняет некоторые операции над строками и затем выводит результат на устройство stdout или в файл. Как правило, в сценариях, sed используется в конвейерной обработке данных, совместно с другими командами и утилитами.
Sed определяет, по заданному адресному пространству, над какими строками следует выполнить операции. [1] Адресное пространство строк задается либо их порядковыми номерами, либо шаблоном. Например, команда 3d заставит sed удалить третью строку, а команда /windows/d означает, что все строки, содержащие "windows", должны быть удалены.
Полезен для:
- Редактирования очень больших файлов;
- Редактирования файлов любой величины, если последовательность команд редактирования является слишком длинной и сложной и, следовательно, неудобной для выполнения интерактивного редактирования.
- Выполнения множества раз одной и той же функции редактирования.
· SED копирует строку из input (стандартный или указываемый набор файлов) в PATTERN SPACE (некоторая область), и к этой строке применяет все команды, адреса которых попадают в PATTERN SPACE . ЗатемPATTERN SPACE копируется в output . (Фактически в PATTERN SPACE находится одна строка, за исключением команды N , см.4. Функции SED )
· Формат:
· SED [-n] [-e script] [-f sfile] [files]
· script - набор команд редактирования SED , который может содержать до 200 команд или до 10000 байт.
· sfile - файл со скриптом SED .
· files - файлы, предназначенные для SED -редактирования.
· -n - указывает, что в output выводятся не все строки, но только те, к которым применялась команда p. (См. 4.Функции SED . и 5.Функция контекстной замены.)
· Флаг -e может быть опущен, если он присутствует один.
· Команда SED :
· [address[,address]] function [arguments]
· адрес адрес функция аргументы
Доступны следующие опции:
-E Интерпретирует регулярные выражения как расширенные (современные), регулярные выражения чаще, чем основные регулярные выражения. Страница документации на
re_format(7) полностью описывает оба формата.
-a Файлы перечисленные как параметры функции ``w'' создаются (или удаляются)
прежде, чем начнется процесс по умолчанию. Опция -a заставляет sed откладывать открытие каждого файла до тех пор, пока команда содержащая связную функцию ``w'' не применяется к строке ввода.
-e command Добавляет команды редактирования определенные аргументом command, к списку команд
-f command_file Добавляет команды редактирования найденные в файле command_file к списку команд. Каждая команда редактирования должна быть перечислена в отдельной строке.
-i extension Редактирует файлы с замещением, сохраняя резервную копию с указанным расширением. Если расширение не указано (нулевой длины), резервная копия не будет сохраняться. Не рекомендуется присваивать нулевое расширение к замещаемым файлам, поскольку вы рискуете полностью или частично повредить файл, когда место на диске исчерпано.
-l создает буфер выходных строк
-n по умолчанию, каждая линия ввода выводиться на стандартный вывод, после того как были применены все команды. Опция -n отменяет это поведение.
Адресация в командах SED
С помощью адресации происходит отбор строк для редактирования.
Адрес:
- Десятичный номер строки;
- $ - последняя строка input ;
- Регулярное выражение.
Если адреса не указаны, то команда применяется ко всем pattern space;
Если присутствует один адрес, то команда применяется ко всем тем pattern space, куда попадает этот адрес;
Если указаны два адреса, то они ограничивают область применения команды.
Sed использует ключ -e для того, чтобы определить, что следующая строка является инструкцией, или набором инструкций, редактирования. Если инструкция является единственной, то использование этого ключа не является обязательным.