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

★★★★

Последнее исправление: fero (всего исправлений: 3)


`--> 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 ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.