Прошу подсказать регулярное выражение, которое подошло-бы для моих целей.
Сколько не пытался разобраться с регуляркой, так мне и не пошло.Ситуация следующая - есть текст (ответ АПИ, полученый через curl):
[{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]
Мне требуется получить ID, который пренадлежит Васе.
Очень надеюсь на вашу помощь!
> Прошу подсказать регулярное выражение, которое подошло-бы для моих целей.
> Сколько не пытался разобраться с регуляркой, так мне и не пошло.
> Ситуация следующая - есть текст (ответ АПИ, полученый через curl):
> [{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]
> Мне требуется получить ID, который пренадлежит Васе.
> Очень надеюсь на вашу помощь!Вам выдается ответ в формате JSON. Для его разбора проще будет использовать скрипт
на Perl, Python или любом другом языке, в котором есть подключаемая библиотека для
работы с JSON. Ну, или искать по запросу вида "json parsing bash regular expression". :-)
>регулярное выражение,Эээ?? А на mips64 ассемблере не набросать JSON-парсер?...
> Ситуация следующая - есть текст (ответ АПИ, полученый через curl):
> [{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]
> Мне требуется получить ID, который пренадлежит Васе.
> Очень надеюсь на вашу помощь!$ echo '[{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]' \
> |jq '.[]|select(.name=="vasya").id'434648634
$ _
> Прошу подсказать регулярное выражение, которое подошло-бы для моих целей.
> Сколько не пытался разобраться с регуляркой, так мне и не пошло.
> Ситуация следующая - есть текст (ответ АПИ, полученый через curl):
> [{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]
> Мне требуется получить ID, который пренадлежит Васе.
> Очень надеюсь на вашу помощь!Правильно, конечно, разбирать json.
Но можно использовать следующий скрипт на perl:
#!/usr/bin/perlmy $user = "vasya";
my $line = '[{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]';
if ($line =~ /\"id\":(\d+),\"name\":\"$user\"/) {
my $ret = $1;
print "$ret\n";
}
Что? Освоил форматирование выхлопа по столбцам? Взялся за джейсоны и эксмээльки? ))
> Что? Освоил форматирование выхлопа по столбцам? Взялся за джейсоны и эксмээльки? ))На вывод по столбцам забил, ибо неудобно. Сделал светодиодную панель с индикацией ошибок, и не нужно в консоль лезть.
Посмотрел что ты мне отвечал ранее (гостевых ников несколько) - зачастую отправляешь в гугл, и все, при этом толком ничего не советуя, и в конце концов дискуссия заканчивается кучей сообщений не по делу, и без какого либо ответа.
> Посмотрел что ты мне отвечал ранее (гостевых ников несколько)я не пишу под гостями
> зачастую отправляешь в гугл, и все, при этом толком ничего не советуяс глупыми вопросами туда единственная дорога
Товарищи, а возможно все-же сделать на Шелле/Баше, без сторонних программ или скриптов?
> Товарищи, а возможно все-же сделать на Шелле/Баше, без сторонних программ или скриптов?Да, можно написать парсер сложного формата на шеле, но делать _этого_ не нужно ни-ког-да.
Объяснять надо?
>ноХотя, с другой стороны, если по собственному опыту... _Один_ раз таки надо^Wможно сделать, если и пока есть силы и время, чтобы _понимать_, почему [больше]:
> делать _этого_ не нужно ни-ког-да.
Ладно, не важно, сам что-то придумаю.
Итак, внимание! Невероятный! Сложный! Тяжелый! Неповторимый скрипт! Всего на три простых действия...echo "$string" | sed 's/{/\n\r/g' | grep 'vasya' | sed 's/^.*"id"://; s/,.*$//'
Вот реально, объясните мне, глупому, зачем велосипеды в виде скриптов, перла и левого софта?
Ну и самое главное - объясните почему-же подобные "парсеры сложного формата на шеле" "делать _этого_ не нужно ни-ког-да"?
> Итак, внимание! Невероятный! Сложный! Тяжелый! Неповторимый скрипт! Всего на три простых
> действия...
> echo "$string" | sed 's/{/\n\r/g' | grep 'vasya' | sed 's/^.*"id"://; s/,.*$//'и опа-на ... тут же наступаем на грабли ...
где гарантия что что значение vasya принадлежит нужному нам атрибуту?
а если name:vasya_mudakov?
> Вот реально, объясните мне, глупому, зачем велосипеды в виде скриптов, перла и
> левого софта?
> Ну и самое главное - объясните почему-же подобные "парсеры сложного формата на
> шеле" "делать _этого_ не нужно ни-ког-да"?потому что это, !ВНЕЗАПНО!, не парсер, а поиск, причем фиксированного значения, в строке фиксированного формата (кстати, как я показал выше еще и не до конца доделанный).
ну а вообще - твой пример весьма простой и редковстречающийся примитив. стоит совсем чуток увеличить сложность и все, приплыли.
модифицируй свой скрип следующим образом: сделать поиск по списку (name задается не одним значение, а списком, скажем файлом), и самое главное - выдерни два атрибута (атрибуты могут идти в произвольном порядке).
и вот тут ты сразу поймешь недостатки своего решения ...
А мне вроди как парсер и незачем, мне нужно получить нужное мне значение со стандартного вида JSON-ответа. JSON-ответ меняться не будет, другие значения мне получать тоже без надобности, мне всего навсего нужно получить id элемента с определенным именем. Я об этом, кстати, в первом сообщении писал, можешь перечитать если не веришь. Я не пишу универсальный парсер на все случаи жизни! Выше об этом сказано!Ладно, предположим что у нас есть там несколько Вась - окей, вносим малюсенькую-малюсенькую коррективу в скрипт:
echo "$string" | sed 's/{/\n\r/g' | grep '"name":"vasya",' | sed 's/^.*"id"://; s/,.*$//'
ииии опля, нам неважно сколько там будет в ответе Вась, ответ будет правильным.
> ииии опля,дорогуша, проверь на этом
{
"id":434648634,
"name":"vasya",
"distribution":"petya",
"blabla":null
}иногда лучше молчать чем говорить, и казаться умнее
Ты вообще читаешь что я пишу?
ПОВТОРЯЮ - Я НЕ ПИШУ УНИВЕРСАЛЬНЫЙ ПАРСЕР!!! Есть сайт, с которого я запрашиваю информацию, ответ шаблонный, он не меняется!
Да и вообще, ты хоть на одном сайте видел Json с переносом строки? Если да - приведи пример. Хотя лучше молчи... Не старайся показаться тем, сам знаешь кем...Короче, если тебе станет легче, вот:
echo "$string" | sed 's/\n//g' | sed 's/{/\n\r/g' | grep '"name":"vasya",' | sed 's/^.*"id"://; s/,.*$//'
схавает и твой пример, которого в жизни не увидишь. Дальше будет Json с пробелами?
> Ты вообще читаешь что я пишу?
> ПОВТОРЯЮ - Я НЕ ПИШУ УНИВЕРСАЛЬНЫЙ ПАРСЕР!!! Есть сайт, с которого я
> запрашиваю информацию, ответ шаблонный, он не меняется!а ха-ха ...
> Да и вообще, ты хоть на одном сайте видел Json с переносом
> строки?пацталом )) а ты когда-нибудь вообще видел текстовые структурированные данный кроме этих?
> пацталом )) а ты когда-нибудь вообще видел текстовые структурированные данный кроме этих?А мы все продолжаем умничать, при этом не приводя ни одного аргумента.
Предоставь сайт, на котором АПИ отдает Json в другом формате. Вот чисто адрес сайта, и все, без очередных понтов.
> Предоставь сайт, на котором АПИ отдает Json в другом формате. Вот чисто
> адрес сайта, и все, без очередных понтов.я выше привел пример который приводит к неработоспособности твоего начального решения, но добавлять костыли в конвейер для тебя гораздо проще чем написать железобетонный перловый регекс.
для начала предоставь (слово то какое :) мне хотя бы один один сайт, который гарантировал бы что json с него завтра прилетит в том же формате, с теме же имена и позициями аргументов, без перевода строки в случайном месте и той же последовательностью используемой в качестве перевода строки, и значения аргументов внезапно не окажутся скажем в utf или вообще 1251 :)
> Есть сайт, с которого я запрашиваю информацию, ответ шаблонный, он не меняется!Это самые популярные слова junior программеров перед увольнением :)
Ну или по срочному фиксингу среди ночи после пьянки и вместо траха :)
> Это самые популярные слова junior программеров перед увольнением :)
> Ну или по срочному фиксингу среди ночи после пьянки и вместо траха
> :)Сочувствую junior’у.
Вот хорошо что я не программер, и мало того, моя профессия даже с компьютерами не связана, ага, я всего навсего пользователь, который использует Линуск на десктопе...
> Сочувствую junior’у.
> Вот хорошо что я не программер, и мало того, моя профессия даже
> с компьютерами не связана, ага, я всего навсего пользователь, который использует
> Линуск на десктопе...это типа такой новый и современный гендерный типаж? линуксовый бдсм с элементами фапания на собственное ЧСВ?
и еще вопрос для непрограммеров - название подфорума читал? маны и доки в другой части сайта лежат.
а вообще конечно занятно, придти на форум, куесосить всех в течении 30 постов, мол дебилы и нихера не понимаете, а потом заявить что я сам вообще то нихера не понимаю и вообще "хорошо что я не программер".
попахивает каким то клиническим слабоумием ...
> Итак, внимание! Невероятный! Сложный! Тяжелый! Неповторимый скрипт! Всего на три простых
> действия...
> echo "$string" | sed 's/{/\n\r/g' | grep 'vasya' | sed 's/^.*"id"://; s/,.*$//'
> Вот реально, объясните мне, глупому, зачем велосипеды в виде скриптов, перла и
> левого софта?
> Ну и самое главное - объясните почему-же подобные "парсеры сложного формата на
> шеле" "делать _этого_ не нужно ни-ког-да"?Затем что ты юзаешь sed и grep, а из баша просто их вызываешь. Вот затем же и перл с левым софтом. Из баша у тебя только "echo" и пайп "|", все остальное - левый софт.
> Затем что ты юзаешь sed и grep, а из баша просто их
> вызываешь. Вот затем же и перл с левым софтом. Из баша
> у тебя только "echo" и пайп "|", все остальное - левый
> софт.Sed и grep стандартные программы, которые есть во всех системах на Линуксе. Перл то вроди тоже есть, но я его совсем не знаю, плюс его внутри Shell-скрипта не выполнить нормально, нужно отдельный скрипт под него делать (хотя тут я могу ошибаться).
> Перл то вроди тоже есть, но я его совсем не знаю,
> плюс его внутри Shell-скрипта не выполнить нормально, нужно отдельный скрипт под
> него делать (хотя тут я могу ошибаться).Надо бы ло на "не знаю" и остановиться, уж на что я перла не знаю, но:
#!/bin/sh
perl -e 'system("x-www-browser \"https" . "://duckduckgo.com/?q=" . "perl+one-liner+in+shell\"")'
> #!/bin/sh
> perl -e 'system("x-www-browser \"https" . "://duckduckgo.com/?q=" . "perl+one-liner+in+shell\"")'три процесса вместо одного? оригинально!
> Sed и grep стандартные программы, которые есть во всех системах на Линуксе.есть то они есть, но огорчу тебя - реализация у них отличается. и отточенный скриптяга во фряхе может не полететь под линем.
> Перл то вроди тоже есть, но я его совсем не знаю,а что ты вообще знаешь? и зачем тогда пытаешься тягать и парсить данные ))
> плюс его внутри Shell-скрипта не выполнить нормально, нужно отдельный скрипт под
> него делать (хотя тут я могу ошибаться).ты ошибаешься в 146% своих высказываний.
>> Sed и grep стандартные программы, которые есть во всех системах на Линуксе.
> есть то они есть, но огорчу тебя - реализация у них отличается.
> и отточенный скриптяга во фряхе может не полететь под линем.
>> Перл то вроди тоже есть, но я его совсем не знаю,
> а что ты вообще знаешь? и зачем тогда пытаешься тягать и парсить
> данные ))
>> плюс его внутри Shell-скрипта не выполнить нормально, нужно отдельный скрипт под
>> него делать (хотя тут я могу ошибаться).
> ты ошибаешься в 146% своих высказываний.Ладно, мастер, хватит понтов, приведи легкое, красивое и действенное решение моей задачи, и на этом закончим.
> Ладно, мастер, хватит понтов, приведи легкое, красивое и действенное решение моей задачи,
> и на этом закончим.вообще десяток постов назад ты кричал что "вот оно" и рамахивал конвейером с костылями ...
или что? уже не работает? :) если что, то сочувствие на данном форуме изливается посетителями без меры ...
> Ладно, мастер, хватит понтов,Притомолся? Ай, бедный.
> приведи легкое, красивое и действенное решение моей задачи,
> и на этом закончим.Уже же, шесть дней и [U]двадцать семь постов[/U] тому назад, в #2 ! WTF, человече?