2017-04-18 13 views
0

다음의 jq 명령 (Windows)은 모든 "텍스트"속성을 하나의 문자열로 묶어서 로터리 방식으로 공백을 하나의 공백으로 대체합니다. 거의 정확합니다. 정말로 원하는 것은 "텍스트"의 선행 또는 후행 공백을 먼저 바꾸고 모든 "텍스트"속성을 연결하는 것입니다. 차이점은 임베디드 (비 선행, 비 후행) 공백을 제거하면 안된다는 것입니다. 어떻게 할 수 있습니까?jq : 배열을 묶고 공백을 제거하는 방법

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

또는 당신은 간단하게 사용할 수 있습니다 :

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

"연결"되어 있습니다. – chepner

답변

1

고려 GSUB를 ("^ \ S | \ s의 *의 $", "")

문자열을 트리밍하는 다른 방법이있다 그러나 위와 같이하면 시작할 수 있습니다.

+0

실제로 시작되었습니다. 고맙습니다. 초기 일치와 후행 일치를 하나의'gsub'와 결합하여 속성의 'join'을 단일 문자열로 결합했습니다. 조인은 조인 중에 단일 공백을 삽입했습니다. Windows에서 탈출하는 것은 추악합니다. (\ "\\ s $) \") \ "\")) | join (\ "\") "jq".segments []. ' – BSalita

+0

def :'jq '데모의 변형을 사용 : gsub (\ "(^ \\ s^| \\ s $) \"; \ "\"); .segments []. (.text? | trim) | join (\ "\") "'와우, 지금은 어른처럼 느껴진다. 다시 한번 감사드립니다. – BSalita

+1

도망 치기를 방지하려면 -f FILENAME 명령 줄 옵션을 사용하는 것이 좋습니다. 시작 파일 (~/.jq)도 고려하십시오. – peak