2017-04-18 1 views
0

La commande jq suivante (Windows) convertit avec succès toutes les propriétés de "texte" en une chaîne en remplaçant tous les espaces par un seul espace mais de façon indirecte. Presque correct. Ce que je veux vraiment, c'est remplacer d'abord tout espace de début ou de fin dans "texte", puis caténer toutes les propriétés de "texte". Une différence étant que les espaces incorporés (non-premiers, non-finaux) ne doivent pas être supprimés. Comment cela peut-il être fait?jq: Comment caténiser un espace de tableau et des espaces de strip

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

C'est "concaténer". – chepner

Répondre

1

Tenir compte:

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

Ou vous pouvez simplement utiliser: gsub ("^ \ s | \ s * $", "")

Il existe d'autres façons de couper une chaîne mais ce qui précède devrait vous aider à démarrer.

+0

En effet, il m'a fait commencer. Je vous remercie. J'ai combiné les correspondances initiales et finales dans un 'gsub' suivi d'un' join' de propriétés dans une seule chaîne. La jointure a inséré un seul espace lors de la jointure. L'échappement de Windows est moche. 'jq" .segments []. mots | carte (.text? | gsub (\ "(^ \\ s^| \\ s $) \"; \ "\")) | joindre (\ "\") " ' – BSalita

+0

En utilisant une variation de votre' def': 'jq" def trim: gsub (\ "(^ \\ s^| \\ s $) \"; \ "\"); .segments []. Mots | carte (.text? | trim) | join (\ "\") "' Wow, je me sens comme un 'jq' adulte maintenant. Merci encore. – BSalita

+1

Pour éviter la laideur d'échappement, je vous recommande d'utiliser l'option de ligne de commande -f FILENAME. Considérez aussi le fichier de démarrage (~/.jq). – peak