web-dev-qa-db-fra.com

Supprimer tous les espaces, tabulations, sauts de ligne, etc. d'une variable?

C'est l'erreur que j'obtiens et elle échoue à cause d'une variable dont la valeur est supposée être 2 (j'obtiens ceci en utilisant un select * from tabel). J'obtiens des espaces dans cette variable.

+ 0 != 
         2
./setjobs[19]: 0:  not found.

Comment supprimer tous ces espaces ou une nouvelle ligne de cette variable? tr, sed, ou autre chose peut-il aider?

Voici ce que je fais:

set_jobs_count=$(echo  "set heading off;
      select count(*) from oppar_db
      where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \
  sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME)

Cela fonctionne comme suggéré:

| sed 's/[[:space:]]//g'

Mais j'obtiens toujours une valeur comme:

  set_jobs_count=
  2
30
munish

Vous pouvez utiliser tr, comme dans tr -d '\040\011\012\015', qui supprimera les espaces, les tabulations, les retours chariot et les retours à la ligne.

41
Kyle Jones

En ksh, bash ou zsh:

set_jobs_count=…
set_jobs_count=${set_jobs_count//[[:space:]]/}

Dans n'importe quel shell, vous pouvez supprimer les espaces blancs de début et de fin et normaliser tous les espaces blancs intermédiaires en un seul espace comme ceci:

set +f
set -- $set_jobs_count
set_jobs_count=$*
set -f

set +f désactive la globalisation; si vous savez que les données ne contiennent aucun des caractères \[?*, vous pouvez l'omettre.