Rimuovi newline dalla variabile unix


12

Ho una variabile il cui valore si trova usando la query sql.

Voglio rimuovere il nuovo carattere di linea da quella variabile poiché desidero concatenare questa variabile con l'altra. Di seguito è riportato il codice:

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"

Risposte:


29

Se si utilizza bash, è possibile utilizzare Espansione parametri:

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

Anche in questo caso dovrebbe funzionare /bin/sh:

dt="${dt%
}"                # Remove a trailing newline.

3
Solo FYI, quando si utilizza ${var//a/}non è necessario utilizzare l'ultimo /, ${var//a}farà esattamente lo stesso.
corsa il

Grazie a tutti. Dietro ha funzionato dt = $ {dt // $ '\ n' /} # Rimuovi tutte le nuove righe.
Pavani,

Per i curiosi nella sintassi completa, ecco un link alla documentazione di bash: gnu.org/software/bash/manual/html_node/…
kalaxy,

12

Sembra che tu abbia bisogno di "tr", qualcosa del tipo:

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

man tr per i dettagli, come al solito


1

Questo lavoro su Linux (bash):

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

Su Linux o altri sistemi con l'utilità di data GNU, questo funziona anche per ottenere quel valore per dt: (senza coinvolgere Oracle ...)

dt="$(date -d 'yesterday' +%Y%b%d)_$(date -d '7 days ago' +%Y%b%d)"

+1 per evitare sqlplus. Se utilizzi un sistema senza data GNU ma hai 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

dal manuale Oracle sqlplus

IMPOSTA PAGINE [IZE] {14 | n} Imposta il numero di righe su ciascuna pagina di output. È possibile impostare PAGESIZE su zero per eliminare tutte le intestazioni, le interruzioni di pagina, i titoli, la riga vuota iniziale e altre informazioni di formattazione.

quindi aggiungi a set pagesize 0al tuo script per evitare una riga vuota dell'intestazione.

per la maggior parte dei miei script utilizzo le impostazioni nel seguente codice:

dt = `sqlplus -s user / pwd @ servicename <<EOF
disattiva il feedback
imposta il formato pagina 0
attiva il trimout
attiva trimspool
imposta la dimensione della linea 300
disattiva l'eco
impostare verifica off

seleziona sostituisci (to_char ((sysdate-7), 'YYYYMonDD') || '_'
|| to_char ((sysdate-1), 'YYYYMonDD'), chr (10), '') dal doppio;
Uscita;
EOF`

echo "test $ dt $ dt"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.