Remove newline da variável unix

8

Eu tenho uma variável cujo valor é encontrado usando a consulta sql.

Eu quero remover o novo caractere de linha dessa variável, pois quero concatenar essa variável com a outra. Abaixo está o 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"
    
por Pavani 29.11.2012 / 14:01

4 respostas

18

Se você estiver usando bash , poderá usar a Expansão de Parâmetros:

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

O seguinte também deve funcionar em /bin/sh :

dt="${dt%
}"                # Remove a trailing newline.
    
por 29.11.2012 / 14:15
9

Parece que você precisa de "tr", algo como:

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

man tr para detalhes, como de costume

    
por 29.11.2012 / 14:18
2

Este trabalho no Linux (bash):

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

No Linux, ou outros sistemas com o utilitário de data do GNU, isso também funciona para obter esse valor para dt: (sem envolver o Oracle ...)

dt="$(date -d 'yesterday' +%Y%b%d)_$(date -d '7 days ago' +%Y%b%d)"
    
por 29.11.2012 / 14:42
0

do manual do Oracle sqlplus

SET PAGES [IZE] {14 | n} Define o número de linhas em cada página de saída. Você pode definir PAGESIZE como zero para suprimir todos os cabeçalhos, quebras de página, títulos, a linha em branco inicial e outras informações de formatação.

adicione um set pagesize 0 ao seu script para evitar uma linha em branco.

para a maioria dos meus scripts, eu uso as configurações no código a seguir:


dt='sqlplus -s user/pwd@servicename &lt &lt EOF
set feedback off
set pagesize 0
set trimout on
set trimspool on
set linesize 300
set echo off
set verify off

select  replace(to_char((sysdate-7),'YYYYMonDD')||'_'
||to_char((sysdate-1),'YYYYMonDD'),chr(10), '') from dual;
exit;
EOF'

echo "test $dt$dt"
    
por 30.11.2012 / 10:41

Tags