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"

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.

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


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)"

+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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.