Регулярное выражение захватывает X значений в linux bash - PullRequest
1 голос
/ 25 апреля 2009

Привет, ребята, интересно, если вы, ребята, могли бы помочь мне, я пытаюсь скомпилировать скрипт bash, который будет отображать некоторые значения из раздела HTML-кода, и я застрял в части регулярного выражения,

У меня есть следующий кусок кода

 <li><div friendid="107647498" class="friendHelperBox"><div><a href="http://www.myspace.com/rockyrobsyn" class="msProfileTextLink" title="rØbylin">rØbylin</a></div><span class="msProfileLink friendToolTipBox" friendid="107647498" style="width:90px;"><a href="http://www.myspace.com/rockyrobsyn"><img src="http://x.myspacecdn.com/modules/common/static/img/spacer.gif" source="http://c2.ac-images.myspacecdn.com/images01/59/s_8b94c89a98de643e59ab9a1cf03885c1.jpg" alt="rØbylin" class="profileimagelink" onerror="UseNoPicImage(event.target||event.srcElement)" /><span class="pilRealName">Robyn</span></a></span></div><br /><img src="http://x.myspacecdn.com/images/onlinenow.gif" /></li><li><div friendid="59261168" class="friendHelperBox"><div><a href="http://www.myspace.com/christownsendmusic" class="msProfileTextLink" title="Chris Townsend">Chris Townsend</a></div><span class="msProfileLink friendToolTipBox" friendid="59261168" style="width:90px;"><a href="http://www.myspace.com/christownsendmusic"><img src="http://x.myspacecdn.com/modules/common/static/img/spacer.gif" source="http://c4.ac-images.myspacecdn.com/images02/83/s_029c098cc40c40ff8f88fe54d53a1277.jpg" alt="Chris Townsend" class="profileimagelink" onerror="UseNoPicImage(event.target||event.srcElement)" /></a></span></div><br /><img src="http://x.myspacecdn.com/images/onlinenow.gif" /></li></ul>

все в одной строке, и я хотел бы вытащить весь текст внутри

..class="msProfileTextLink" title="<GRAB THIS TEXT>">....

Я хотел бы захватить все случаи, как я могу это сделать?

Ответы [ 4 ]

1 голос
/ 25 апреля 2009

Попробуйте это

awk '/title="([^"]*)"/ {print substr($2,8,length($2)-8)}'
1 голос
/ 25 апреля 2009

Следующее регулярное выражение в стиле Perl должно работать для вас:

m/class="msProfileTextLink"\s*title="([^"]+)"/g

Если вы используете его из скрипта bash, вы можете использовать его в однострочном Perl (см. -p и -e Perl параметры командной строки ) или на другом языке, поддерживающем регулярные выражения в стиле Perl, например Python, PHP и т. д.

1 голос
/ 25 апреля 2009

Я предполагаю, что можно вызывать стандартные инструменты Unix, а не только встроенные средства bash

Ну,

grep -o 'class="msProfileTextLink" title="([^"])*"' file.html

дает вам возможность:

class="msProfileTextLink" title="rØbylin"

class="msProfileTextLink" title="Chris Townsend"

Это предполагает, что в html-коде никогда не будет пробелов, иначе вам нужно будет сделать

egrep -o 'class="msProfileTextLink"[[:space:]]*title="([^"])*"' вставляя [[space]]* везде, где может быть пробел.

Тогда grep -o '"[^"]*"$' Получает до:

"rØbylin"

"Крис Таунсенд"

1 голос
/ 25 апреля 2009

А как насчет Perl? ;)

#!/usr/bin/perl

$string = 'Your string';

$string =~ m/class=\"msProfileTextLink\" title=\"([^\"]*)\"/;

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