由于示例中反斜杠的数量有所不同,因此我不清楚双引号是否已在输入文本中转义。我假设他们都没有,即输入的文字看起来是这样的:
sometext... "partialSearch":true ... sometext...
..bla bla bla... "partialsearch":false ...
和我下面的例子将这个假设下工作。
有一些要点。
你似乎试图解析正则表达式的JSON输入。虽然这对于快速而肮脏的一次性作业是可以接受的,但在您知道正在处理的数据的确切格式的情况下,通常这是一个不好的主意。您应该使用JSON解析器,如jq
。
你显然已经在变量searchCurl
中存储了一些bash代码。这被认为是不好的做法。代替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 = $(...)'。 –