由於示例中反斜槓的數量有所不同,因此我不清楚雙引號是否已在輸入文本中轉義。我假設他們都沒有,即輸入的文字看起來是這樣的:
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 = $(...)'。 –