Forum Programmation.shell supprimer le code hexa 0A dans une variable

Posté par  .
Étiquettes : aucune
0
10
nov.
2005
Bonjour,

je galère sur un problème qui doit être assez simple ..mais bon .. je suis débutant

Voilà mon script de test ..

Je dois récupérer dans une variable le resultat de la procédure Oracle rcdcurval ...

Au lancement de la requête Oracle, je supprime l'affichage de l'entête et le rapport de l'exécution de cette requête, de manière à ne recupérer que la valeur de ma séquence (rcdcurval est censée etre comprise entre 0 et 365).

Mon souci est que je récupère une variable sur 7 caractères avec des blancs. En faisait CURVALCOR=`echo -n "$CURVAL" | sed 's/ //g' ` j'arrive à supprimer des blancs .. mais il me reste un saut de ligne ... en hexa ça donne 0A 20 20 20 20 20 31 OA pour la variable CURVAL

Ce numero de sequence doit me servir à renseigner un nom de fichier ... <nom_de_fichier>nnn.txt ou nnn est le numero de sequence égal à $CURVAL.

Pouvez vous me dire comment supprimer le retour à la ligne que contient la variable $CURVAL ?
Quel est la méthode pour enlever le saut de ligne .. ou comment avec un sed ... faire le s/??//g que vaut ??

Avec mes remerciements ..


#!/bin/sh
#################################
# Paramètres environnement
#################################
#
export LANG=fr_FR
export LC_ALL="fr_FR"
export LC_CTYPE=ISO-8859-1
#
#################################
# Paramètres procédure
#################################
#
JOUR=$(date +%a)-$(date +%d)-$(date +%b)-$(date +%Y)
user="RCD"
psw="RCD"
CURVAL=
CURVALCOR=
#
##################################
# Fonction Sqlplus connexion
##################################
#
function exec_connex {
if ( echo "$user/$psw@MABASE
echo "whenever sqlerror exit 1"
echo "$1"
echo "exit"
) | sqlplus -s
then
return 0
else
return 1
fi
}

##################################
# Fonction proc sql
##################################
#
function exec_proc {
CURVAL=$(( echo "set feedback off
set heading off
set numwidth 3
var result number
execute rcdcurval(:result)
print :result
exit"
) | sqlplus -s $user/$psw 2>/dev/null)
}
### FIN FONCTION PROCEDURE #####
#
if exec_connex
then exec_proc
echo "valeur de CURVAL : ${CURVAL}"
echo "longueur de CURVAL : ${#CURVAL}"
else
echo ""
echo "========================================="
echo "= Anomalie connexion Sqlplus pour $user ="
echo "========================================="
echo "";
exit;
fi;
##################################
# TEST RESULTAT
##################################
#
CURVALCOR=`echo -n "$CURVAL" | sed 's/ //g' `
echo "curvalcor vaut apres le sed : ${CURVALCOR}"
echo "longueur de curvalcor : ${#CURVALCOR}"
echo ""
echo "${CURVAL}"
echo ""
CURVALCOR=`cut -b "${#CURVAL}" $CURVAL`
echo "valeur modifiée par cut"
echo "$CURVALCOR longueur ${#CURVALCOR}"
  • # pourquoi faire simple

    Posté par  . Évalué à 1.

    quand on peut faire compliqué ?

    chez moi je fait un bête coupe=$(echo ${vra}) et ca me supprime les espaces et retour a la ligne :)

    sinon avec sed au lieux de couper ce qui t'interesse pas, prence ce que tu veux avec \\w+

    ps : si je me souvient bien début de ligne c'est ^
    fin de ligne c'est $

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: pourquoi faire simple

      Posté par  . Évalué à 1.

      merci .. c'est effectivement ce qu'il me fallait ..
      je suis débutant Linux ..désolé .. il me manque franchement les bases.
  • # À propos de sed

    Posté par  . Évalué à 1.

  • # tr

    Posté par  . Évalué à 3.

    Avec tr, tu peux enlever les blancs et les sauts de lignes avec:
    tr -d ' \n'
    ou
    tr -d '[:space:]'
    :space: représente tous les caractères d'espacement; tu retires donc les espaces, sauts de lignes et tabulations.
    • [^] # Re: tr

      Posté par  . Évalué à 1.

      merci beaucoup. C'est une des commandes possibles qu'il me fallait pour ne récupérer que la valeur nécessaire à mon batch.

      Merci.

Suivre le flux des commentaires

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