Возможно ли это? sed совершенно точно не умеет осуществлять нежадный разбор и непонимает минимальные квантификаторы в стиле .+?
Использовать Perl для одной-единственной замены в строке как-то не хочется. Не знаю, может awk поддерживает модификаторы регекспов, позволяющие (локально хотя бы) изменять способ разбора с жадного на нежадный?
P.S. Мне нужно сделать замену в строке, так что pcregrep и практически эквивалентный ему grep -P в данном случае "отпадают"
Re: Нежадный разбор регулярных выражений на BASH #1
Не уверен, но гнутый кажется может. Пишу из винды, поэтому не могу проверить. Посмотри мануал по sed.
Копай в сторону расширенного синтаксиса. Включается параметром -r или -R, точно не помню.
Поехали!
JID: konst.su [обезьяна] gmail.com
Re: Нежадный разбор регулярных выражений на BASH #2
Да ты прав. То о чем я говорил выше - это POSIX regexp, а там нежадного разбора нет.
Можно sed помочь. Если проблема в том, что sed "жадничает", например,
$ echo 'fred aaa aaa aaa' | sed -e 's/fred.*aaa/bbb/'
bbb
то для того, чтобы он не захватывал последнее 'aaa', нужно в начале найти первое 'aaa' и промаркировать его:
$ echo 'fred aaa aaa aaa' | sed -ne 's/aaa//
> s/fred.*/bbb/
> p'
bbb aaa aaa
В первой строке мы заменяем aaa на , а уже потом меняем 'fred.*' на 'bbb'
Поехали!
JID: konst.su [обезьяна] gmail.com
Re: Нежадный разбор регулярных выражений на BASH #3
Продолжение мысли
Тут может быть проблема в том, что если встретится `aaa' без предшествующего fred,
то на выходе потока мы получим `'. Это решается добавлением всего одной строчки:
$ echo 'fred aaa aaa aaa' | sed -ne 's/aaa//
> s/fred.*/bbb/
> s//aaa/
> p'
bbb aaa aaa
$ echo 'aaa' | sed -ne 's/aaa//
> s/fred.*/bbb/
> s//aaa/
> p'
aaa
Ну и конечно маркеры должны быть уникальными.
Можно <> заменить на один предшествующий маркер, например,
$ echo 'fred aaa aaa aaa' | sed -ne 's/aaa/aaa/
> s/fred.*aaa/bbb/
> s/aaa/aaa/
> p'
bbb aaa aaa
или более "наворочено"
$ echo 'fred aaa aaa aaa' | sed -ne 's|aaa|aaa|
> s|fred.*aaa|bbb|
> s|aaa|aaa|
> p'
bbb aaa aaa
Поехали!
JID: konst.su [обезьяна] gmail.com
Re: Нежадный разбор регулярных выражений на BASH #4
А почему бы не использовать gawk? Регэкспы там неплохо работают, у меня ни разу
проблем не было.
Per aspera ad astra!
Re: Нежадный разбор регулярных выражений на BASH #5
Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!
Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"