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"

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.

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


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

+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"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.