Forum Programmation.shell Comment mettre un caractère e n fin de la premiere ligne sur shell

Posté par . Licence CC by-sa.
Tags :
-3
21
oct.
2019

Bonsoire..

J'ai un problème avec cette commande shell à tirer les cheveux…
je veux mettre le caractère " a la fin de la première ligne mais son succès et il se plante toujours au début de la seconde ligne…
```

sed 's#^#url3="https:#' $Servertmpa75 > $Servertmpb78
sed 's#$#"#' $Servertmpb78 > $Servertmpb79
PATCH_J_XM2=$(cat /tmp/servrb79)
sed -i "s#url3=.*#${PATCH_J_XM2}#" /tmp/server

le resulta:

1 url3="https:https://www.server.net/live-tv/
2 "
3
```

  • # Contenu de servertmpa75

    Posté par (page perso) . Évalué à 1 (+0/-0).

    Peux-tu nous montrer à quoi ressemble le fichier servertmpa75 ? (anonymise le au pire) car là j'ai du mal à t'aider.

    Vu comme ça j'ai l'imperssion que tu remplace simplement le début de la ligne avec url3="https et qu'ensuite tu souhaites rajouter " à la fin ?

    vanilla, ma distribution radicalement différente : http://projects.malikania.fr/vanilla

  • # Re: Comment mettre un caractère e n fin de la premiere ligne sur shell

    Posté par (page perso) . Évalué à 5 (+3/-0). Dernière modification le 22/10/19 à 09:48.

    Comme ça ?

    $ echo -e '1\n2' | sed '1s/$/"/'
    1"
    2

    Petite explication :

    • la commande echo affiche deux lignes.
    • la commande sed commande par 1, indiquant qu'on se cantonne à la première ligne. On appelle cela l'adresse dans sed.
    • la commande s substitue la fin de ligne ($) par le caractère ".
    • [^] # Re: Comment mettre un caractère e n fin de la premiere ligne sur shell

      Posté par . Évalué à -4 (+0/-0).

      C'est magique ton truc, merci bcp…

    • [^] # Re: Comment mettre un caractère e n fin de la premiere ligne sur shell

      Posté par . Évalué à -4 (+0/-0). Dernière modification le 23/10/19 à 01:28.

      Comment faire pour mettre url1= au début de la première ligne url2= au debut de la seconde ligne et ainsi de suite…

      mon fichier est comme ça
      http://es2020….
      http://es2020….
      http://es2020….
      ……
      ……
      j'ai pu mettre le caractère " a la fin de chaque ligne avec cette commande:

      sed 's/$/"\n/'

      • [^] # Re: Comment mettre un caractère e n fin de la premiere ligne sur shell

        Posté par (page perso) . Évalué à 3 (+1/-0).

        Ça me semble impossible avec un simple sed. Je serait tenté d'aller vers awk.

        $ echo -e 'a\nb' | awk '{ print "url" NR "=" $0 }'
        url1=a
        url2=b
        $
        • [^] # Re: Comment mettre un caractère e n fin de la premiere ligne sur shell

          Posté par . Évalué à -4 (+0/-0). Dernière modification le 23/10/19 à 10:51.

          j'ai pu le faire avec sed et cat mais c'est pas propre

          sed 's#^#="#g' $FreeServertmpb73 > $FreeServertmpb71
          nl -ba $FreeServertmpb71 > $FreeServertmpb72
          cat $FreeServertmpb72 | sed -re 's/^[[:space:]]*//g' > $FreeServertmpb73
          cat $FreeServertmpb73 | tr -d "[:blank:]" > $FreeServertmpb74
          sed 's#^#url#g' $FreeServertmpb74 > $FreeServertmpb71
          sed 's#"##g' $FreeServertmpb71 > $FreeServertmpb72
          

          des fois le résultat que j'ai et comme ca

          url1="http://iptv…..
          "
          url2=http://iptv2…..
          "
          url3=http://iptv2…..
          "

          • [^] # Choix des outils

            Posté par . Évalué à 3 (+1/-0). Dernière modification le 23/10/19 à 15:00.

            j'ai pu le faire avec sed et cat mais c'est pas propre

            As-tu une contrainte qui te limite à ces outils, ou est-ce juste du masochisme ?

            Pour ma part, sauf contrainte forte (par exemple la nécessité qu’un script puisse tourner sur des systèmes dont je n’ai pas le contrôle et dont je ne suis pas sûr des outils installés), j’utilise des outils efficaces, ça épargne ma santé mentale.

            Pour ajouter les guillemets à la solution d’Étienne :

            awk '{ print "url" NR "=\"" $0 "\"" }' fichier_a_traiter

            AWK est l’outil typique pour ce genre de manipulation, plus puissant et moins cryptique que sed.

            À noter : $0 contient la ligne sans le caractère de saut de ligne, donc le guillemet final est sur la bonne ligne.

            Sinon, avec Perl :

            perl -nle 'print "url$.=\"$_\""' fichier_a_traiter

            Perl, c’est légèrement moins simple pour les cas triviaux que le shell ou AWK, mais quand le cas se complique, c’est bien plus puissant.

            À noter :
            -n le fait boucler sur les lignes de l’entrée standard ou des fichiers passés en paramètres (comme awk),
            -l le fait enlever les sauts de ligne en entrée et les remettre en sortie (ainsi le guillemet final est sur la bonne ligne ; man perlrun pour plus de détails),
            $. est le numéro de la ligne courante,
            $_ la ligne courante (man perlvar),
            il interprète les variables dans les chaînes de caractères, comme le shell.

            D’un autre côté, en situation hostile (ni Perl, ni AWK), je ferais ça en shell pur (pas besoin de sed, il n’y a pas de remplacement à faire) :
            nl=0; echo -e 'a\nb\nc' | while read l; do nl=$((nl+1)); echo "url$nl=\"$l\""; done; unset nl

            ¯ : macron (typographie), petit signe diacritique, qui prétend ne pencher ni à gauche ni à droite, mais se place nettement au dessus des vraies lettres, qu’il considère avec mépris.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.