Eliminar nueva línea de la variable unix

12

Tengo una variable cuyo valor se encuentra usando la consulta sql.

Quiero eliminar el nuevo carácter de línea de esa variable ya que quiero concatenar esta variable con la otra. Debajo está el código:

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
fuente

Respuestas:

29

Si está usando bash, puede usar la expansión de parámetros:

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

Lo siguiente también debería funcionar /bin/sh:

dt="${dt%
}"                # Remove a trailing newline.
choroba
fuente
3
Solo para tu información, cuando estás usando ${var//a/}no necesitas usar el último /, ${var//a}hará exactamente lo mismo.
prisa el
Gracias a todos. Lo siguiente funcionó dt = $ {dt // $ '\ n' /} # Eliminar todas las líneas nuevas.
Pavani
Para aquellos curiosos en la sintaxis completa, aquí hay un enlace a la documentación de bash: gnu.org/software/bash/manual/html_node/…
kalaxy
12

Parece que necesitas "tr", algo así como:

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

man tr para detalles, como siempre

sthysel
fuente
1

Este trabajo en Linux (bash):

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

En Linux u otros sistemas con la utilidad de fecha de GNU, esto también funciona para obtener ese valor para dt: (sin involucrar a Oracle ...)

dt="$(date -d 'yesterday' +%Y%b%d)_$(date -d '7 days ago' +%Y%b%d)"
Gert van den Berg
fuente
+1 para evitar sqlplus. Si está en un sistema sin fecha GNU pero tiene 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

del manual Oracle sqlplus

ESTABLECER PÁGINAS [IZE] {14 | n} Establece el número de líneas en cada página de salida. Puede establecer PAGESIZE en cero para suprimir todos los encabezados, saltos de página, títulos, la línea en blanco inicial y otra información de formato.

así que agregue un set pagesize 0a su script para evitar un encabezado en blanco.

para la mayoría de mis scripts utilizo la configuración en el siguiente código:

dt = `sqlplus -s user / pwd @ servicename <<EOF
establecer retroalimentación
establecer tamaño de página 0
establecer recorte en
establecer trimspool en
establecer el tamaño de línea 300
desactivar eco
establecer verificar apagado

seleccione reemplazar (to_char ((sysdate-7), 'AAAAMonDD') || '_'
|| to_char ((sysdate-1), 'AAAAMonDD'), chr (10), '') desde dual;
salida;
EOF`

echo "prueba $ dt $ dt"
milagro173
fuente