URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9721
[ Назад ]

Исходное сообщение
"Поиск и отсев 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 , 14-Авг-13 20:20 
> Как бы красиво это сделать? Есть два варианта, оба работают.
> Задача найти строку и вывести только цифры:
> 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 , 14-Авг-13 22:19 
Не работает почему-то
Там такая строчка:

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

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


"Поиск и отсев grep и sed"
Отправлено allez , 15-Авг-13 05:34 
> Не работает почему-то
> Там такая строчка:
> 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. Получите точный ответ без "вроде бы". :-)


"Поиск и отсев grep и sed"
Отправлено Raven77 , 15-Авг-13 08:38 
Да, точно, забыл про возможную разность версий,
так как у меня-то команды из первого сообщения работают.