Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Вывод подстроки на экран  (Прочитано 1826 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SFireMan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Вывод подстроки на экран
« : 15 Ноября 2008, 17:14:11 »
Помогите плз. Необходимо вывести все подстроки из некоторой строки, удовлетворяющие условиям:
начинаются с символов @@@ и заканчиваются пробелом или концом строки.
Пример:
вход: some text, aaa=@@@z, bbb=@@@x and ccc=@@@a
выход: @@@z,@@@x,@@@a
Как реализовать?
Потом данную подстроку будет необходимо заменить другой.
Как реализовать замену?
« Последнее редактирование: 15 Ноября 2008, 17:25:48 от SFireMan »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Вывод подстроки на экран
« Ответ #1 : 15 Ноября 2008, 20:00:17 »
SFireMan,
google > sed examples OR patterns
man sed

burgua

  • Гость
Re: Вывод подстроки на экран
« Ответ #2 : 15 Ноября 2008, 21:58:58 »
Тейнсли. Программирование в bash/sed/awk

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Вывод подстроки на экран
« Ответ #3 : 16 Ноября 2008, 09:15:14 »
#!/usr/bin/perl

use warnings;
use strict;

foreach my $line (<STDIN>) {
        my @ar = $line =~ /(\@{3}\w+)[\,\ \n]/g;
                print join(',', @ar), "\n";
}
Подаёшь свой текст на стандартный вход программе. На стандартном выводе получаешь желаемое.
P.S. для обработки текстов Perl и создавался, так что никакие извращения bash+sed+awk с ним не сравнятся

burgua

  • Гость
Re: Вывод подстроки на экран
« Ответ #4 : 16 Ноября 2008, 14:04:08 »
ASM rullez!

Оффлайн SFireMan

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
Re: Вывод подстроки на экран
« Ответ #5 : 16 Ноября 2008, 17:55:04 »
Yurror большое спасибо за Perl, в яблочко - то что мне нужно, ибо запарили извраты с sed/awk - голова щас взорвется. >:(
Надо было сразу сказать цель сего действия. Поробую объеяснить...
Дело в том что пишу типо простенького прекомпиллятора для конфигов, цель - есть набор конфигов(окло 30-40 штук) в которых встречаются однотипные значения(IP ареса, параметры соединений и т.д. и т.п.)
Хочу все параметры хранить в едином файле(переменные bash однозначно т.к. к ним нужно еще обращаться и из bash скриптов), чтобы было удобно редактировать и переходить к новым настройкам.
Таким образом передо мной встала задача нужен код на bash + perl.
Задача кода на bash - запустить perl скрипт передать ему на вход содержимое конфига, при запросе perl скрипта значения переменной передать ее значения.
Соответственно задача perl скрипта - найти переменные в STDIN, запросить значение c STDIN, вывести строку на STDOUT.

сейчас чуток передал perl скрипт:
#!/usr/bin/perl

foreach my $line (<STDIN>) {
        my @list = $line =~ /(\@{3}\w+)[\,\ \n]/g;
        foreach my $element (@list) {
                $name=substr($element,3);
                print "$name\n";
                $val=<STDIN>;
        }
}
Помогите идеей/кодом как доработать до желаемого.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Вывод подстроки на экран
« Ответ #6 : 17 Ноября 2008, 18:11:49 »
найти переменные в STDIN, запросить значение c STDIN
Ты как нибудь определись что ты будешь делать со стандартным вводом. Он один.
Можно конечно брать и то и то из него.  Но половину с клавы, половину из файла не получится...

 

Страница сгенерирована за 0.058 секунд. Запросов: 26.