Supprimer la nouvelle ligne de la variable Unix

12

J'ai une variable dont la valeur est trouvée en utilisant la requête SQL.

Je veux supprimer le nouveau traiteur de ligne de cette variable car je veux concaténer cette variable avec l'autre. Voici le code:

dt=`sqlplus -s user/pwd@servicename <<EOF
set feedback off;
set head off;
select  replace(to_char((sysdate-7),'YYYYMonDD')||'_'||to_char((sysdate-1),'YYYYMonDD'),chr(10), '') from dual;
exit;
EOF`

echo "test $dt"
Pavani
la source

Réponses:

29

Si vous utilisez bash, vous pouvez utiliser l'extension des paramètres:

dt=${dt//$'\n'/} # Remove all newlines.
dt=${dt%$'\n'}   # Remove a trailing newline.

Les éléments suivants devraient également fonctionner /bin/sh:

dt="${dt%
}"                # Remove a trailing newline.
choroba
la source
3
Juste FYI, lorsque vous utilisez ${var//a/}vous n'avez pas besoin d'utiliser en dernier /, ${var//a}fera exactement la même chose.
rush
Merci à tous. La chose ci-dessous a fonctionné dt = $ {dt // $ '\ n' /} # Supprimez tous les retours à la ligne.
Pavani
Pour les curieux de la syntaxe complète, voici un lien vers la documentation bash: gnu.org/software/bash/manual/html_node/…
kalaxy
12

On dirait que vous avez besoin de "tr", quelque chose comme:

 echo ${dt} | tr -d '\n'

man tr pour les détails, comme d'habitude

sthysel
la source
1

Ce travail sur Linux (bash):

dt="$(echo "$dt"|tr -d '\n')"

Sous Linux, ou d'autres systèmes avec l'utilitaire de date de GNU, cela fonctionne également pour obtenir cette valeur pour dt: (sans impliquer Oracle ...)

dt="$(date -d 'yesterday' +%Y%b%d)_$(date -d '7 days ago' +%Y%b%d)"
Gert van den Berg
la source
+1 pour éviter sqlplus. Si vous êtes sur un système sans date GNU mais que vous avez Tcl:echo 'puts [clock format [clock scan "-1 week"] -format %Y%b%d]_[clock format [clock scan yesterday] -format %Y%b%d]' | tclsh
glenn jackman
0

du manuel Oracle sqlplus

FIXER DES PAGES [IZE] {14 | n} Définit le nombre de lignes sur chaque page de sortie. Vous pouvez définir PAGESIZE sur zéro pour supprimer tous les en-têtes, les sauts de page, les titres, la ligne vierge initiale et d'autres informations de mise en forme.

ajoutez donc un set pagesize 0à votre script pour éviter une ligne vide de titre.

pour la plupart de mes scripts, j'utilise les paramètres du code suivant:

dt = `sqlplus -s user / pwd @ servicename <<EOF
désactiver la rétroaction
définir la taille de page 0
activer le découpage
activer la garniture
set linesize 300
désactiver l'écho
désactiver la vérification

sélectionnez replace (to_char ((sysdate-7), 'YYYYMonDD') || '_'
|| to_char ((sysdate-1), 'YYYYMonDD'), chr (10), '') de dual;
sortie;
EOF`

echo "test $ dt $ dt"
miracle173
la source