Remover nova linha da variável unix

12

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

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"
Pavani
fonte

Respostas:

29

Se você estiver usando bash, poderá usar a expansão de parâmetro:

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

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

dt="${dt%
}"                # Remove a trailing newline.
choroba
fonte
3
Apenas para sua informação, quando você está usando ${var//a/}, não precisa usar o último /, ${var//a}fará exatamente o mesmo.
apressar
Obrigado a todos. Abaixo, a coisa funcionou dt = $ {dt // $ '\ n' /} # Remova todas as novas linhas.
Pavani
Para os curiosos na sintaxe completa, aqui está um link para a documentação bash: gnu.org/software/bash/manual/html_node/...
kalaxy
12

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

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

man tr para detalhes, como sempre

sthysel
fonte
1

Este trabalho no Linux (bash):

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

No Linux, ou em 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)"
Gert van den Berg
fonte
+1 para evitar sqlplus. Se você estiver em um sistema sem data GNU, mas você tem 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

do manual Oracle sqlplus

DEFINIR PÁGINAS [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 títulos, quebras de página, títulos, a linha em branco inicial e outras informações de formatação.

adicione um set pagesize 0ao seu script para evitar uma linha em branco do cabeçalho.

para a maioria dos meus scripts, uso as configurações no seguinte trecho de código:

dt = `usuário sqlplus -s / pwd @ nome do serviço <<EOF
desativar feedback
definir tamanho da página 0
definir recorte em
definir trimspool em
definir tamanho da linha 300
defina eco
definir verificação desativada

selecione substituir (to_char ((sysdate-7), 'YYYYMonDD') || '_'
|| to_char ((sysdate-1), 'YYYYMonDD'), chr (10), '') de dual;
Saída;
EOF`

eco "teste $ dt $ dt"
miracle173
fonte