2017-08-15 31 views
-1

在我的bash腳本,我創建了返回以下JSON數組的函數:bash的grep的一部分

{ 
    "access_token": "sjdhjdYdjsdbhggjhSJ78dbdsdbMhd=", 
    "scopes": "repository:delete repository:admin repository:write project:write team:write account:write", 
    "expires_in": 3600, 
    "refresh_token": "skdjKJDJDBNBDs", 
    "token_type": "bearer" 
} 

現在我wan't到grep的「」之間的訪問令牌。所以我得到了sjdhjdYdjsdbhggjhSJ78dbdsdbMhd=

我創建了一個像下面這樣的正則表達式,但是這會返回一個grep: invalid repetition count(s)錯誤。

grep -P '\{\s*"access_token"\s*:\s*(.+?)\s*\"' foobar.txt 
+0

一個有趣的事情是,他們的行爲跨根據系統的不同變量,比如哪個libpcre你的grep被編譯了。在我的系統(GNU的grep 3.1,libpcre 8.41),你原來的代碼無需修改。 –

+0

@Gavin,如果你能在瑞普OP的錯誤,你能提供的版本信息? –

+0

(順便說一句,我假設,真實的數據沒有換行符 - 儘管被給予的問題,例如新行 - 爲給定的'grep'命令未在多模式下運行,而不會匹配'\ s'下的換行符)。 –

回答

1

既然你在非標準dependending,不可移植的功能(在grep -P形式),你不妨切換到對手頭的工作建(實際上是理解JSON語法的工具,所以它即使你輸入了,比方說,鍵和值之間的換行符,只要它的語法有效LL工作):關於使用非標準功能

jq -r .access_token <foobar.txt