[sed] как удалить строки, которые не содержат паттерн

yolki

есть html в котором есть строчки

<a href= "/user.php?user=%username%"> Информация об авторе </a>

хочется выковырять различные ники.
можно конечно сделать что-то типа

grep user= 1.html | sed -e 's/.*"\/user\.php?user=\([^"]*\)".*/\1/'

но может, как-то можно в самом sed ?

Serab

sed -n — не печатает по умолчанию
есть команда p
например
sed -n '/pattern/p'
с s/// сам совмести :)
а вообще man sed, там не очень много

Serab

о, еще есть флаг 'p' к s///:
sed -n -e 's/.*"\/user\.php?user=\([^"]*\)".*/\1/p'

istran

Каноничный способ — применять несколько команд:

sed -n '/some_regex/{command1;command2;command3;p;}'

Serab

тут дублирование будет, сначала /pattern/, потом s/pattern/..., а там все просто.

bleyman

Используй (g)awk, он по крайней мере нормальный язык программирования
чё-нить вроде
awk 'match($0, ".*\"\/user\.php?user=\([^\"]*\)\".*", groups) {print groups[1]}'

yolki

и то и то полно по тьюрингу, так что утверждение "нормальный язык программирования" по меньшей мере спорно

Serab

Причем тут полнота по тьюрингу? Вопрос в удобстве применения. Методы, которыми дается полнота по тьюрингу в sed'е (реализация ленты как бэ не позволяют хоть как-то адекватно на нем программировать. Даже на шаблонах плюсов и то можно написать получитаемую программу, а тут-то это вообще просто прикол.

Bibi

полнота по Тьюрингу: http://beza1e1.tuxen.de/articles/accidentally_turing_complet...

laralat2

grep -v ?

Serab

дальше заголовка не читала, понятно...
Да и заголовок наоборот поняла :crazy:
Оставить комментарий
Имя или ник:
Комментарий: