The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Поиск и отсев grep и sed, !*! Raven77, 14-Авг-13, 19:36  [смотреть все]
Как бы красиво это сделать? Есть два варианта, оба работают.
Задача найти строку и вывести только цифры:
1.
grep -wo \"Почта\".\/\>\<strong.class=\"num\"\>[0-9]* | grep -o [0-9]*

2. grep -wo \"Почта\".\/\>\<strong.class=\"num\"\>[0-9] | sed s/[\a-z\<\>\\/\"\=\Почта\ \]//g

Вроде бы считается, что sed работает быстрее. Или это не принципиально для такой простой задачи?
Можно ли использовать grep дважды?
И как бы сделать это с sed менее символозатратно?

  • Поиск и отсев grep и sed, !*! allez, 20:20 , 14-Авг-13 (1)
    > Как бы красиво это сделать? Есть два варианта, оба работают.
    > Задача найти строку и вывести только цифры:
    > 1.
    > grep -wo \"Почта\".\/\>\<strong.class=\"num\"\>[0-9]* | grep -o [0-9]*
    > 2. grep -wo \"Почта\".\/\>\<strong.class=\"num\"\>[0-9] | sed s/[\a-z\<\>\\/\"\=\Почта\
    > \]//g
    > Вроде бы считается, что sed работает быстрее. Или это не принципиально для
    > такой простой задачи?
    > Можно ли использовать grep дважды?
    > И как бы сделать это с sed менее символозатратно?

    Попробуйте так:


    sed -nr '/"Почта".\/><strong.class="num">[0-9]/s/[^[:digit:]]//gp'

    • Поиск и отсев grep и sed, !*! Raven77, 22:19 , 14-Авг-13 (2)
      Не работает почему-то
      Там такая строчка:

      alt="Почта" /></span>123

      Т.е. это не вся строка,  нужная часть только

      • Поиск и отсев grep и sed, !*! allez, 05:34 , 15-Авг-13 (3)
        > Не работает почему-то
        > Там такая строчка:
        > alt="Почта" /></span>123
        > Т.е. это не вся строка,  нужная часть только

        Вот ведь ёлы-палы! :-) Я из вашего же сообщения брал строку поиска, а тут вы заявляете, что
        в реальности оно не так - в заблуждение вводите, однако. :-)

        Ну да ладно, попробуем несколько упростить фильтр:


        sed -nr '/Почта.*[0-9]/s/[^[:digit:]]//gp'

        У меня эта конструкция работает:


        $ echo '"Почта"./><strong.class="num">1234jj09' | sed -nr '/Почта.*[0-9]/s/[^[:digit:]]//gp'
        123409

        P. S. И еще один немаловажный момент: какую ОС и версию sed вы используете? Собственно,
        мне с этого вопроса и следовало бы начать, поскольку сами-то вы этого не указали. :-)

        P. P. S. Насчет "вроде бы sed работает быстрее" могу посоветовать использовать утилиту time.
        Несколько раз прогоните команды вида time grep <file> и time sed <file>, а потом
        сравните вывод, который будет выдавать time. Получите точный ответ без "вроде бы". :-)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру