[Linux] grep нежадный вариант регулярного выражения
Упс, соврал.
вроде, так: "a.*?bc"
man grep: -o
более того, не совсем понятно почему должно работать
![](/images/graemlins/smile.gif)
вот что в мане написано про него
A regular expression may be followed by one of several repetition operators:
? The preceding item is optional and matched at most once.
man grep: -oчто значит ": -o" не понял, но ман по грепу читал. Про нежадные варианты выражений ничего не нашел.
Упс, соврал.
![](/images/graemlins/smile.gif)
только я хотел ответить "
![](/images/graemlins/ooo.gif)
>grep --version
grep (GNU grep) 2.5.1-FreeBSD
Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
В man grep слово greedness вообще не встречается, так что есть подозрение, что надо смотреть на awk/sed/perl…
хм, странно, у меня на grep -P grep (2.5.1) отвечает "The -P option is not supported". Так и должно быть?
sed -re 's/a[^b]|b[^c])*)bc/\1/'
---
"Аллах не ведёт людей неверных."
Это... А разве греп вообще такое могет? Он разве не со строками работает? По делу - по идее то что контра написал должно работать.
$ sed --version
GNU sed version 4.1.4
---
...Я работаю антинаучным аферистом...
> (сделать так чтобы оставалось a1234ttt567bc)
sed -re 's/^[^a]*(a[^b]|b[^c])*)bc).*$/\1/'
---
"Аллах не ведёт людей неверных."
Оставить комментарий
migel
Пусть есть строка:"a1234ttt567bcbcbc"
я хочу grep'ом из нее выделить все что между a и первым bc.
пишу
grep -e "a.*bc"
и он берет по максимуму (т.е. a1234ttt567bcbcbc как этого избежать?
(сделать так чтобы оставалось a1234ttt567bc)