Suppression \n si dernier c

lineo -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Savez-vous comment supprimer en shell/bash le denier \n d'une variable ?

J'ai essayé avec du
sed -b 's/\n$//'
mais ça n'a pas l'air d'être la bonne piste vu que sed est prévu à la base pour travailler par ligne

D'avance, merci

1 réponse

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    $ var="abcd\n\n" ; echo -e ${var%\\n}
    abcd

    $ echo -e "$var"
    abcd

    $
    1
    1. lineo
       
      Salut,
      Merci pour ta solution,
      Désolé de répondre un peu tard,

      Je me suis mal expliqué avec mon \n, en fait je cherche à supprimer le dernier "saut de ligne" dans une variable qui est multiligne. Pas de caractères spéciaux à interpréter avec un echo -e mais du texte brut.
      (Et suppression uniquement s'il y a un caractère "saut de ligne" en dernier caractère, sinon on ne fait rien)

      $ var="abcd
      >
      > "
      $ echo "$var"
      abcd


      $ echo "${var%\\n}"
      abcd


      $
      0
    2. manuel
       
      Salut,

      Essaie avec
       sed '${/^$/d}'
      :

      Mint ~ $ echo "${var}" | cat -A
      abcd$
      $
      $
      Mint ~ $ echo "${var}" | sed '${/^$/d}' | cat -A
      abcd$
      $
      Mint ~ $


      PS. Le
      cat -A
      n'est là que pour montrer les fins de ligne
      0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      ou
      $ echo "${var}"
      abcd


      $ echo "${var%$'\n'}"
      abcd

      $
      0
    4. lineo
       
      Merci pour cette solution efficace :)
      Exactement ce que je cherchais


      Le cat -A est pratique aussi mais il oblige à transformer à l'entrée et rétablir à la sortie, je cherchais quelquechose de plus simple (et avec un $ dans la variable il n'a pas l'air de faire la différence, et il ajoute un saut de ligne comme dernier caractère même quand il n'y en a pas, et le sed ne risque de me supprimer toutes les lignes vides?)
      0
    5. manuel
       
      En fait dans
      sed '${/^$/d}'
      , le premier "$" désigne la dernière ligne et ensuite on teste si elle est effectivement vide avec "
      /^$/
      " et on la supprime avec "d" le cas échéant. Les accolades sont là pour signifier que les commandes à l'intérieur ne s'appliquent qu'à la dernière ligne.
      0