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

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-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  (site web personnel) . Évalué à 1.

    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 ?

    git is great because linus did it, mercurial is better because he didn't

  • # Commentaire supprimé

    Posté par  . Évalué à 6. Dernière modification le 22 octobre 2019 à 09:48.

    Ce commentaire a été supprimé par l’équipe de modération.

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

      Posté par  . Évalué à -4.

      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. Dernière modification le 23 octobre 2019 à 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/'

      • [^] # Commentaire supprimé

        Posté par  . Évalué à 4.

        Ce commentaire a été supprimé par l’équipe de modération.

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

          Posté par  . Évalué à -4. Dernière modification le 23 octobre 2019 à 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. Dernière modification le 23 octobre 2019 à 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

            « Le fascisme c’est la gangrène, à Santiago comme à Paris. » — Renaud, Hexagone

Suivre le flux des commentaires

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