Поскольку количество обратных косых черт в ваших примерах различно, мне не ясно, если двойные кавычки уже экранированы во входном тексте. Я предполагаю, что они не являются, то есть ввод текста выглядит примерно так:
sometext... "partialSearch":true ... sometext...
..bla bla bla... "partialsearch":false ...
и мои примеры ниже, будет работать в этом предположении.
Существует несколько моментов.
Вы, кажется, пытаетесь разобрать ввод JSON с регулярными выражениями. Хотя это может быть приемлемо для быстро и грязных одноразовых заданий, где вы знаете точный формат обрабатываемых данных, в целом это плохая идея . Вы должны использовать парсер JSON, например jq
.
Очевидно, что вы сохранили некоторый код bash в переменной searchCurl
. Это считается плохой практикой. Вместо searchCurl="... code ..."
вы должны сделать function searchCurl() { ... code ... }
и позвонить по номеру searchCurl
, не указав знак доллара. Переменные для значений, функции для кода.
В большинстве случаев, если вы собираетесь использовать sed
, лучше использовать его для всех, не вызывая grep
. Иногда проще иметь и то, и другое. Ниже приведен пример.
Чтобы назначить вывод команды переменной, вы должны использовать подстановку команд.
Короче говоря, если в вашем входном тексте имеется только один матч '"partialSearch":(true|false)'
, это то, что вы хотите:
isPartial=$(searchCurl|sed -rn 's/^.*"partialSearch":(true|false).*$/\1/p')
Если у вас есть еще и ввод текста одна большая линия, как я предположим, использование grep -o
может упростить задачу разделения входа в один матч на линии, так что
isPartial=$(searchCurl|grep -Po '"partialSearch":(true|false)'|sed -e 's/^.*://')
может быть то, что вы хотите (и в этом случае, isPartial
будет содержать разделенный пробелами список true
и false
).
Вы хотите [подстановка команды] (https://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution): 'isPartial = $ (...)'. –