Обработка текста (поиск и замена)
Модератор: Модераторы разделов
-
Daeloce
- Сообщения: 62
- ОС: OpenSUSE 11.0 Ubuntu 9.04
Обработка текста
Есть некий файл. Мне надо найти в нем подстроку согласно шаблону(рег.выражению) сохранить эту подстроку в переменную, сделать с ней некие операции, а затем найти следующую подстроку по тому же шаблону следующую за предыдущей. Как это сделать на shell'e? Есть подозрение что это делается с использованием awk но как не понятно...Операции которые будут проводиться с полученной подстрокой(если это важно) это запись в файл, чтения из файла и сравнение этой подстроки с другой строкой.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Обработка текста
т.е. надо просматривать текстовый файл и для некоторого УСЛОВИЯ выполнять над строкой КОМАНДУ? можно...
вот такая команда выполнит команду file для всех строк из текста который берётся из ls, а условие - что-бы имя файла было без слеша(если со слешем - это каталог)
Код: Выделить всё
ls | sed -nr '/^[^\/]+$/ s//file &/ep'конечно можно заменить file на какой-нить скрипт, и параметр будет передан этому скрипту в $1. Я предполагаю, что в этом каталоге все файлы нормально названы, без пробелов и проч.
можно так-же использовать awk, и её system(), можно ещё как-нибудь...
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Обработка текста
а это всё и сама sed может сделать:
запись w
чтение r
сравнение - вы не поверите, s
есть и 5 команд переходов, q Q t T b, что-бы организовать ветвление.
сравнение в sed интересно реализованно:
например нужно проверить 2 соседних строки, одна есть, подсоединяем ещё одну командой N, ну и сравниваем s/(.*)\n\1/Совпадение/
если строки совпадают, то они меняются на строку "Совпадение", и кроме того, следующая команда t выполнит переход. Если не совпадают, то замены и перехода не будет.