Не жадное (неохотное) соответствие регулярных выражений в sed?

Предполагая, что вы используете внутренний построитель Eclipse goto Preferences-> C / C ++ Build-> Settings

Выберите раздел предупреждений для компилятора, есть флажки для -Wall и -pedantic For -ansi set в Разное

Как отмечает OP, это просто для каждого проекта, а не для глобальной установки

379
задан Ondra Žižka 3 May 2018 в 13:10
поделиться

6 ответов

Ни базовое, ни расширенное регулярное выражение Posix / GNU не распознает нежадный квантификатор; вам нужно более позднее регулярное выражение. К счастью, регулярное выражение Perl для этого контекста довольно легко получить:

perl -pe 's|(http://.*?/).*|\1|'
410
ответ дан 22 November 2019 в 23:45
поделиться
sed 's|(http:\/\/[^\/]+\/).*|\1|'
3
ответ дан 22 November 2019 в 23:45
поделиться

sed -E интерпретирует регулярные выражения как расширенные (современные) регулярные выражения

Обновление: -E в MacOS X, -r в GNU sed.

3
ответ дан 22 November 2019 в 23:45
поделиться

Другой способ, не использующий регулярное выражение, - использовать метод полей / разделителей, например

string="http://www.suepearson.co.uk/product/174/71/3816/"
echo $string | awk -F"/" '{print $1,$2,$3}' OFS="/"
9
ответ дан 22 November 2019 в 23:45
поделиться

sed не поддерживает «нежадный» оператор.

Вы должны использовать оператор «[]», чтобы исключить «/» из совпадения.

sed 's,\(http://[^/]*\)/.*,\1,'

PS нет необходимости использовать обратную косую черту "/".

36
ответ дан 22 November 2019 в 23:45
поделиться

В этом конкретном случае вы можете выполнить работу без использования нежадного регулярного выражения.

Попробуйте это нежадное регулярное выражение [^ /] * вместо . *? :

sed 's|\(http://[^/]*/\).*|\1|g'
239
ответ дан 22 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: