J'ai essayé de supprimer les nouveaux indicateurs de ligne et de retour chariot de ma sortie JSON en utilisant cette réponse .
J'ai également essayé d'exécuter ceci en me basant sur une autre réponse que j'ai vue sur Stack Overflow, mais cela ne semble toujours pas fonctionner:
getPage() {
curl --fail -X GET 'https://api.test.com/v1/marx?page=1&pageSize=1000&sort=desc' \
-H 'Authorization: Bearer xxxxxxx' \
-H 'cache-control: no-cache'
}
getPage \
| jq -c '.data[]' \
> text.json
Mon script .sh actuel ressemble à ceci:
sed -E ':a;N;$!ba;s/\r{0,1}\n/\\n/g' text.json > text_clean.json
Que me manque-t-il ici?
Si cela aide, un exemple de la chaîne qui le contient prend de nombreuses formes différentes dans la sortie, mais en voici une bonne:
Ok! Merci beaucoup. \ R \ nMeilleur, \ r \ nClaire \ r \ n \ r \ n
3 Réponses :
Vous pouvez supprimer les caractères en utilisant perl si vous l'avez installé:
echo "Ok! Thank you so much.\r\nBest,\r\nClaire\r\n\r\n" | perl -pe 's/\r\n//g'
perl est sans danger pour le travail. tr ne l'est pas.
@CharlesDuffy Merci pour le tuyau. J'ai supprimé l'exemple pour tr .
Si vous souhaitez modifier JSON, faites-le dans Dans ce cas, cela peut signifier changer: jq. final getPage \
| jq -c '.data[] | sub("\r\n"; " ") | sub("\n"; " ")' \
> text.json
J'utiliserais tr pour cela.
Dans votre exemple, essayez ce qui suit:
echo "Ok! Thank you so much.\r\nBest,\r\nClaire\r\n\r\n"| tr -d '\012\015'
Cela suppose que ce sont des caractères de contrôle littéraux; mais si je comprends bien, l'OP traite en fait de la barre oblique inverse littérale suivie par le littéral r ou n pour représenter ces caractères dans JSON.
Je viens d'utiliser le même exemple qu'il utilise, mais quand même, même s'il est littéral ou non, il devrait toujours fonctionner en script bash.
@Emma J'ai essayé d'appliquer cette méthodologie et cela ne fonctionne toujours pas :(
@Emma Je vais lancer
sed -i 's / \ r // g' text.jsonet ça ne fera vraiment rien@gooponyagrinch Si vous avez installé
perl, vous pourrez peut-être obtenir le résultat que vous attendez deecho "Ok! Merci beaucoup. \ r \ nMieux, \ r \ nClaire \ r \ n \ r \ n "| perl -pe 's / \ r \ n // g'@gooponyagrinch Ou en utilisant
tr:echo "Ok! Merci beaucoup. \ r \ nBest, \ r \ nClaire \ r \ n \ r \ n" | tr -d '\ r \ n'Ce serait utile si nous pouvions réellement voir les entrées littérales. Si les nouvelles lignes que vous souhaitez supprimer ne sont pas littérales et se trouvent dans des chaînes JSON, je dirais à
jqde faire la suppression.@Jebby,
trfonctionne sur des caractères individuels, donc s'il analyse votre entrée pour supprimer une barre oblique inverse littérale (suivie d'unrounou non ), il supprimera également un littéralnet un littéralrpar eux-mêmes.