LINUX.ORG.RU

[regexp]


0

3

Привет.

Покажите, пожалуйста, как захватить регуляркой несколько строк.

Вот так работает:

$ cat test
<h1>Мой заголовок</h1>

$ egrep "<[Hh]1>.*</[Hh]1>" test
<h1>Мой заголовок</h1>

А вот так - уже нет:

$ cat test
<h1>Мой 
заголовок</h1>

$ egrep "<[Hh]1>.*</[Hh]1>" test  | wc -l
       0

Спасибо.

1) Не нужно, 2) есть xmlstarlet, 3) если уж использовать xml с грепом - есть xml2, 4) нужно что-нибудь не только linewise (sam), или костыли (sed + :t, N), ruby (можно и питон):

ruby -e 'puts STDIN.read.gsub(/<h1>((.|\n)*)<\/h1>/i,"\\1")'
anonymous ()
Ответ на: комментарий от anonymous

grep умеет работать только построчно, т.е. если просто добавить «0 или более символов перевода строки» в regex, то это не сработает?

Frakhtan-teh ★★ ()
Ответ на: комментарий от Frakhtan-teh

«0 или более символов перевода строки» в regex, то это не сработает?

Проверить же не сложно? Если фиксированы границы (регэксп не затрагивает промежуточные стороки), то можно обойтись: sed -n '/<h1>/,/<\/h1>/p'.

anonymous ()

Сначала объединить в одну строку, заменяя символы новой строки на пробелы.

// C. O.

r2d2 ()
Ответ на: комментарий от yozan

А объясните неграмотному, чем это лучше:

sed -n '/<h1>/,/<\/h1>/p'

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.