Suppression \n si dernier c

lineo -  
dubcek Messages postés 18789 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
A voir également:

1 réponse

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

$ echo -e "$var"
abcd


$
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
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
ou
$ echo "${var}"
abcd


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

$
0
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
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