URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9813
[ Назад ]

Исходное сообщение
"Поиск текста"

Отправлено Djeck , 16-Янв-14 22:42 
test
<div>uyiuyewrwuriuo eerer rwerw rwerw<> <a href="index.html">shuba 28900 rub.</a>
</div>

sh
#!/bin/bash
cat test | sed -r 's/^.*uba ([0-9]+) rub.*$/\1/'

Запускаю и вижу:
28900
</div>

А нужно получить только цифру 28900
А получается что есть цифра и хвост за ней, что не так в регулярке? Почему вылезает </div> ?


Содержание

Сообщения в этом обсуждении
"Поиск текста"
Отправлено Led , 17-Янв-14 03:22 
> А получается что есть цифра и хвост за ней, что не так
> в регулярке? Почему вылезает </div> ?

man sed


"Поиск текста"
Отправлено pavel_simple , 17-Янв-14 09:02 
>[оверквотинг удален]
> </div>
> sh
> #!/bin/bash
> cat test | sed -r 's/^.*uba ([0-9]+) rub.*$/\1/'
> Запускаю и вижу:
> 28900
> </div>
> А нужно получить только цифру 28900
> А получается что есть цифра и хвост за ней, что не так
> в регулярке? Почему вылезает </div> ?

man xmlstarlet


"Поиск текста"
Отправлено Andrey Mitrofanov , 17-Янв-14 09:21 
>> в регулярке? Почему вылезает </div> ?
> man xmlstarlet

-bash: xmlstarlet: команда не найдена

Совсем уже со своим xml. Если не выстрелил grep, потом не выстрелил sed, то awk -f \< '...' и не балуйся.


"Поиск текста"
Отправлено pavel_simple , 17-Янв-14 09:49 
>>> в регулярке? Почему вылезает </div> ?
>> man xmlstarlet
> -bash: xmlstarlet: команда не найдена
> Совсем уже со своим xml. Если не выстрелил grep, потом не выстрелил
> sed, то awk -f \< '...' и не балуйся.

человекам иногда нужно давать такие иyструменты чтобы оне поменьше думали -- а то у них перегруз случается раньше чем минимальный опыт.

в мануале что по sed что по awk многа букав -- разучались люди читать.


"Поиск текста"
Отправлено Andrey Mitrofanov , 17-Янв-14 09:18 
> <div>uyiuyewrwuriuo eerer rwerw rwerw<> <a href="index.html">shuba 28900 rub.</a>
> </div>
> cat test | sed -r 's/^.*uba ([0-9]+) rub.*$/\1/'

Следи за руками:

<test sed -nr 's/^.*uba ([0-9]+) rub.*$/\1/p'

> Запускаю и вижу:
> 28900
> </div>
> А нужно получить только цифру 28900

Во-первых, _число, а не цЫфру.

> А получается что есть цифра и хвост за ней, что не так
> в регулярке? Почему вылезает </div> ?

А во-вторых, ман сед же.


"Поиск текста"
Отправлено pavel_simple , 17-Янв-14 09:50 
> Во-первых, _число, а не цЫфру.

он ещё садик не закончил -- а ты ему про маны.


"Поиск текста"
Отправлено Djeck , 17-Янв-14 13:05 
> Следи за руками:
> <test sed -nr 's/^.*uba ([0-9]+) rub.*$/\1/p'

волшебник! шаман! спасибо!
можно несколько вопросиков?

значок "<" перед test что означает?
и в конце /p что значит?

маны читал. про sed тоже читал. ну не доходит до меня значение ключей -n и -r
-r, --regexp-extended
использование в скрипте расширенных регулярных выражений.
-e script, --expression=script
добавление скрипта в исполняемые команды

сталкнулся еще с такой проблемой. страница html (оригинал) в кодировке 1251. а у меня пингвин utf8.

пробую так:
<http.txt | iconv -f cp1251 | sed -nr 's/^.*уба ([0-9]+) руб.*$/\1/p'

и ни как не поддается зверь!



"Поиск текста"
Отправлено pavlinux , 17-Янв-14 16:54 
> значок "<" перед test что означает?

cat test |

> и в конце /p что значит?

print


"Поиск текста"
Отправлено михалыч , 18-Янв-14 09:00 
> пробую так:
> <http.txt | iconv -f cp1251 | sed -nr 's/^.*уба ([0-9]+) руб.*$/\1/p'
> и ни как не поддается зверь!

За ненадобностью, нет смысла конвертировать цифры, ибо нужны только они.
sed -nr 's/^.* ([0-9]*) .*$/\1/p' test


"Поиск текста"
Отправлено Djeck , 20-Янв-14 11:07 
>> пробую так:
>> <http.txt | iconv -f cp1251 | sed -nr 's/^.*уба ([0-9]+) руб.*$/\1/p'
>> и ни как не поддается зверь!
> За ненадобностью, нет смысла конвертировать цифры, ибо нужны только они.
> sed -nr 's/^.* ([0-9]*) .*$/\1/p' test

цифры должны относиться к чему то например к "Шуба" а не к сапогам.
задача была выцепить цену "Шуба". мы ищем "Шуба" и выдергиваем цену. Слова "Шуба" унас в 1251 соответвственно нужна перекодировка.


"Поиск текста"
Отправлено михалыч , 20-Янв-14 12:01 
> цифры должны относиться к чему то например к "Шуба" а не к сапогам.
> задача была выцепить цену "Шуба". мы ищем "Шуба" и выдергиваем цену.
> Слова "Шуба" унас в 1251 соответвственно нужна перекодировка.

iconv -f cp1251 http.txt | sed -nr 's/^.*уба ([0-9]+) руб.*$/\1/p'


"Поиск текста"
Отправлено Andrey Mitrofanov , 18-Янв-14 10:52 
>> <test sed -nr 's/^.*uba ([0-9]+) rub.*$/\1/p'
> значок "<" перед test что означает?

то же, что и всегда, перенаправление в/в

> и в конце> пробую так:
> <http.txt | iconv -f cp1251 | sed -nr 's/^.*уба ([0-9]+) руб.*$/\1/p'
> и ни как не поддается зверь!

<file command -option1  -option2  -option3

это то же самое (чуть нетрадиционно записанное, но вызвавшее ошибку выше), что и любое из

command -option1  -option2  -option3 <file
command -option1  -option2 <file -option3
command <file -option1  -option2  -option3

потому, что перенаправление в/в и опции ком.строки парсят и/или обрабатывают разными программами в разное время

бессмысленно (хотя ошибки не даст, вроде) следующее

command -optionA -optionB -optionC | command2 <file -option1  -option2  -option3


"Поиск текста"
Отправлено михалыч , 17-Янв-14 10:31 
> А нужно получить только цифру 28900
> А получается что есть цифра и хвост за ней, что не так
> в регулярке? Почему вылезает </div> ?

Короче, Склифосовский!
sed 's/[^0-9]*//g' test
perl -pe 's/[^0-9]+//g' test