Вернуть каждый экземпляр регулярного выражения - PullRequest
2 голосов
/ 06 апреля 2011

Я много гуглил, и все продолжают говорить мне, как вернуть строку, которой соответствует регулярное выражение ...

go, скажем, у меня есть такая строка в текстовом файле:

<a href=http://google.com> Google </a>

Я хочу иметь возможность возвращать ТОЛЬКО то, что происходит между> и <("Google").Проблема в том, что у меня может быть файл с тысячами таких строк, и я хочу, чтобы sed / awk возвращал строку EXACT, соответствующую регулярному выражению.</p>

Я подумал, что это будет что-то вроде:

sed 's/>.*</p'

но очевидно, что это не сработает ...

Это убивает меня, потому что я уверен, что это, вероятно, очень простоно я просто не могу найти правильную линию sed.может sed просто не делать этого?

Так что я просто хочу, чтобы он поискал в файле, нашел регулярное выражение, которое я ему дал, и вернул точное совпадение (не строку)

у кого-нибудь естьидеи?

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

с `sed

sed -n 's/^.*>\([^<]*\)<.*$/\1/p'
2 голосов
/ 06 апреля 2011

Если у вас есть GNU grep, опция -o делает то, что вы хотите.

echo '<a href=http://google.com> Google </a><span>foo</span>' | 
grep -oP '(?<=>).*?(?=<)'

возвращает

 Google 
foo

Предполагается, что ваши HTML-теги и вложенные в них данные находятся в одной строке. Это не будет соответствовать

<a href=...>
blah
</a>
...