Обработка текста (поиск и замена)

Модератор: Модераторы разделов

Аватара пользователя
Daeloce
Сообщения: 62
ОС: OpenSUSE 11.0 Ubuntu 9.04

Обработка текста

Сообщение Daeloce »

Есть некий файл. Мне надо найти в нем подстроку согласно шаблону(рег.выражению) сохранить эту подстроку в переменную, сделать с ней некие операции, а затем найти следующую подстроку по тому же шаблону следующую за предыдущей. Как это сделать на shell'e? Есть подозрение что это делается с использованием awk но как не понятно...Операции которые будут проводиться с полученной подстрокой(если это важно) это запись в файл, чтения из файла и сравнение этой подстроки с другой строкой.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обработка текста

Сообщение drBatty »

Daeloce писал(а):
20.05.2009 00:00
Есть некий файл. Мне надо найти в нем подстроку согласно шаблону(рег.выражению) сохранить эту подстроку в переменную, сделать с ней некие операции

т.е. надо просматривать текстовый файл и для некоторого УСЛОВИЯ выполнять над строкой КОМАНДУ? можно...
вот такая команда выполнит команду file для всех строк из текста который берётся из ls, а условие - что-бы имя файла было без слеша(если со слешем - это каталог)

Код: Выделить всё

ls | sed -nr '/^[^\/]+$/ s//file &/ep'

конечно можно заменить file на какой-нить скрипт, и параметр будет передан этому скрипту в $1. Я предполагаю, что в этом каталоге все файлы нормально названы, без пробелов и проч.
можно так-же использовать awk, и её system(), можно ещё как-нибудь...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обработка текста

Сообщение drBatty »

Daeloce писал(а):
20.05.2009 00:00
запись в файл, чтения из файла и сравнение этой подстроки с другой строкой.

а это всё и сама sed может сделать:
запись w
чтение r
сравнение - вы не поверите, s
есть и 5 команд переходов, q Q t T b, что-бы организовать ветвление.
сравнение в sed интересно реализованно:
например нужно проверить 2 соседних строки, одна есть, подсоединяем ещё одну командой N, ну и сравниваем s/(.*)\n\1/Совпадение/
если строки совпадают, то они меняются на строку "Совпадение", и кроме того, следующая команда t выполнит переход. Если не совпадают, то замены и перехода не будет.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: