Я получаю эту ошибку
Ошибка RE: недопустимый операнд оператора повторения
На FreeBSD sed, использую csh.
Команда:
sed -rn 's/.*?VIEW ([^\s]+?) (AS .*?)\s([^\s]+?)\s([^\s]+?)/DROP VIEW \1;\nCREATE VIEW \1 \2;/p'
я виделэтот вопросно у меня нет никаких *+
s, но у меня есть некоторые *?
s, но это должно означать нежадность. Что я делаю не так?
решение1
Это уже упоминалось в комментариях к вопросу, но чтобы сделать ответ более явным:
Нежадное сопоставление недоступно в sed, как при использовании стандартного, так и расширенного режима регулярных выражений.
Если вы знаете символ, который должен завершить матч, вы можете использовать следующую технику, описанную здесь:https://0x2a.at/blog/2008/07/sed--non-greedy-matching/
Жадное сопоставление:
$ echo "<b>foo</b>bar" | sed 's/<.*>//g'
bar
Нежадное сопоставление:
$ echo "<b>foo</b>bar" | sed 's/<[^>]*>//g'
foobar