Команда Bash-Sed зависает, когда ничего не найдено - PullRequest
1 голос
/ 17 ноября 2011

Я использую sed для разбора некоторой HTML-страницы, вот код:

name=`echo $p | sed -n 's/.*href=\"\([^"]*\)" class=\"alleLink iTitle\"><span>\([^<]*\)<\/span>.*/\1/p'`;

Когда есть совпадение, оно работает хорошо - возвращает требуемую подстроку.Но когда нет совпадения, sed просто останавливается и скрипт ничего не делает.Я просто хочу получить пустую строку или что-то в этом роде.

Вы знаете, что делать?

Спасибо, Роман Zkamene

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Пара баллов:

  1. Это неизбежно должно быть первым

  2. Вы можете упростить выражение, используя переключатель -r для sed

1 голос
/ 17 ноября 2011

Рекомендую установить Perl-модуль WWW :: Mechanize с помощью команды

cpan -i WWW::Mechanize

или найдите в вашем менеджере пакетов perl. * Mechanize

тогда вы сможете запустить эту команду в оболочке (интерактивно или нет), чтобы увидеть все ссылки на странице:

mech-dump --links http://foobar.tld

Более того, sed не является подходящим инструментом для разбора HTML. Python Ruby или Perl будет вашим лучшим выбором.

Я думаю на примере

  • питон + lxml или питон + красивый суп
  • Perl + WWW :: Механизация

Еще одна вещь:

вы можете использовать любой символ в качестве разделителя, так что экранирование / не обязательно и будет более читабельным для всех

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...