2017-04-18 30 views
0

以下jq命令(Windows)成功地將所有「文本」屬性鏈接到一個字符串中,儘管以迂迴方式替換具有單個空格的任何空格。幾乎正確。我真正想要的是首先替換「文本」中的任何前導或尾隨空格,然後鏈接所有「文本」屬性。不同之處在於嵌入式(非前導,非尾隨)空間不能被刪除。如何才能做到這一點?jq:如何鏈接陣列和條空間

jq ".segments[].words | map(.text?) | join(\",\") | gsub(\"[ ]\"; \"\") | gsub(\"[,]\"; \" \")" 
+0

這是「連接」。 – chepner

回答

1

考慮:

def trim: sub("^ *";"") | sub(" *$";""); 

或者你可以簡單地使用:GSUB( 「^ \ s | \ s * $」; 「」)

還有其他的方法來修剪字符串但上面應該讓你開始。

+0

確實讓我開始了。謝謝。我將初始匹配和尾隨匹配合併爲一個'gsub',然後將屬性加入單個字符串中。連接時,連接插入一個空格。 Windows逃脫是醜陋的。 'jq「.segments []。words | map(.text?| gsub(\」(^ \\ s^| \\ s $)\「; \」\「))| join(\」\「)」 ' – BSalita

+0

使用'def'的變體:'jq「def trim:gsub(\」(^ \\ s^| \\ s $)\「; \」\「); .segments []。words | map (.text?| trim)| join(\「\」)「哇,我現在感覺像一個'jq'大人。再次感謝。 – BSalita

+1

爲避免逃避醜陋,我建議使用-f FILENAME命令行選項。考慮啓動文件(〜/ .jq)。 – peak