IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

jq : comment remplacer sub par mgsub et conversion de caractères


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 59
    Par défaut jq : comment remplacer sub par mgsub et conversion de caractères
    Bonjour,

    J'ai fait un script qui permet d'extraire du texte d'images mais je n'arrive pas à faire 2 choses :

    1 - Je remplace les retours à la ligne par un espace mais j'ai plusieurs chaines à remplacer (disons "a" par "b", "c" par "d" et "e" par "f"). J'ai essayé avec mgsub sans succès mais je pense que je m'y prend mal. Serait-ce possible de m'aider ? L'idéal serait un tableau en début de script.

    2 - Dans mon fichier de sortie "response.txt", les caractères comme "é" et "à" sont "É" and À (je crois que c'est en iso et non en utf-8). Comment les convertir ?

    Voici mon script :

    ```
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #!/bin/bash
    IFS=$'\n'
    file=/home/freebox/input.txt
    lines=$(cat ${file})
    for line in ${lines}; do
     
       curl -X POST \
         -H "Content-Type: application/json; charset=utf-8" \
         --data "{
          'requests': [
            {
              'image': {
                'source': {
                  'imageUri': '${line}'
                }
              },
              'features': [
                {
                  'type': 'TEXT_DETECTION'
                }
              ]
            }
          ]
        }" "https://vision.googleapis.com/v1/images:annotate?key=mykey" | jq -r '.responses[0].textAnnotations[0].description | gsub("[\n]"; " ") | ascii_downcase' > cat >> response.txt
    done
    IFS=""
    exit ${?}
    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 665
    Par défaut
    Bonjour,

    pour ce qui est de bash : Comment lire un fichier
    la modification de l'IFS est donc inutile.

    tu fais un usage inutile de cat.

    quant à jq, je ne sais pas : je ne pratique pas assez.
    je ne suis pas certain que ce soit, ici, le meilleur endroit pour poser des question sur la manipulation de JSON...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 59
    Par défaut
    Merci N_BaH pour ton retour. Pour la manipulation, ou penses-tu qu'il est préférable que je demande ?

    Merci

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 665
    Par défaut
    je pensais qu'il y avait un sujet dédié à jq sous la rubrique java, mais je n'en ai finalement pas trouvé.

    je ne trouve pas non plus mgsub dans le man jq.

    est-ce que tu peux nous mettre la sortie de curl en fichier joint si elle est longue, ou entre balises CODE s'il n'y a que qeulques lignes ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 362
    Par défaut
    Et soit aussi plus explicite sur les chaines à remplacer, car remplacer une lettre par une autre ce n'est pas la même chose que remplacer un mot par un autre, on n'utilise pas les mêmes type de replace pour ça.

    Sinon, pour tes caractères accentués, ils sont bien en utf-8, c'est soit ton terminal qui est en iso, soit ton reader de fichier...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 59
    Par défaut
    Si je retire "| ascii_downcase" j'ai par exemple la chaine suivante :

    LE COURAGE N'EST PAS L'ABSENCE DE PEUR MAIS NOTRE CAPACITÉ À LA VAINCRE

    et si je remet "| ascii_downcase" et que je passe le lecteur en utf8, j'ai la chaine suivante :

    le courage n'est pas l'absence de peur mais notre capacitÉ À la vaincre

    Je souhaiterai donc avoir des minuscules pour les caractères accentués.

Discussions similaires

  1. [XL-2003] Comment remplacer #VALEUR! par 0?
    Par filsdepub dans le forum Excel
    Réponses: 4
    Dernier message: 06/01/2014, 10h47
  2. comment remplacer iseries par DB2 client
    Par le_binr dans le forum DB2
    Réponses: 1
    Dernier message: 04/11/2007, 16h46
  3. Comment remplacer TDBNavigator par des boutons ?
    Par SOPSOU dans le forum Composants VCL
    Réponses: 5
    Dernier message: 11/10/2007, 14h26
  4. Réponses: 5
    Dernier message: 30/05/2005, 16h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo