LINUX.ORG.RU

grep вывод всех символов кроме подстроки


0

1

Пытаюсь вывести фрагменты строк начинающиеся с http://, затем идут любые символы кроме строки jpg. Как сгрупировать 3 символа, чтоб они были, как один?
Попытался сделать исходя из опыта работы с vim: grep -o http://[^\(jpg\)]*
выводит только http://i23.fast, а хотелось бы:

http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.

Ну и исходная строка на всякий случай:

http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.jpg

★★★★


`--> echo http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.jpg | sed -e 's/jpg$//'
http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.
provaton ★★★★★ ()
$ echo http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.jpg | grep -o "^http://.*[^\.]\."
http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.
$ grep --version | grep grep
GNU grep 2.5.3
adriano32 ★★★ ()
Ответ на: комментарий от fero

Ну тогда сперва grep jpg и затем grepать из пайпа, иначе по-моему никак.

adriano32 ★★★ ()
echo http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.jpg | grep -Eo "(http://.*)[^(jpg)]"                                                                              
http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.

lazyklimm ★★★★★ ()
echo "http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.jpg" | awk -Fjpg '{print $1}'
sdio ★★★★★ ()
Ответ на: комментарий от lazyklimm

>echo http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.jpg | grep -Eo "(http://.*)[^(jpg)]"
Вот этого я и хотел, спасибо!
Думаю вопрос можно закрыть. Но sed и awk тоже осилить постараюсь, не зря же здесь о них так часто упоминают.

fero ★★★★ ()
Ответ на: комментарий от anarquista

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

anarquista ★★★★★ ()
15 сентября 2011 г.
Ответ на: комментарий от fero

Не знаю, как я смотрел, но ничего не работает. В [^(jpg)], jpg видется, не единой строкой, а набором букв. например выражение grep -Eo «http://[^(jpg)]*» сделает из строки: http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.jpg строку: http://i23.fast, а нужно чтоб было http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.

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

кажется понял

тебе нужно что-то вроде [^x]:

 echo http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.jpg  | grep -Po 'http://(.*(?=jpg)|.*)'
Но как долго оно будет работать я не знаю :(

mdraven ()
Ответ на: кажется понял от mdraven

быстро fix

echo http://i23.fastpic.ru/big/2010/0522/ca/dfgsdf34wrdfg34g34yth23rt.jpg | grep -Po 'http://(.*?(?=jpg)|.*)'
использовал бы ты лучше awk

mdraven ()
Ответ на: кажется понял от mdraven

Вроде работает. Спасибо. Буду разбирать выражение.

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