Hapus baris baru dari variabel unix

12

Saya memiliki variabel yang nilainya ditemukan menggunakan kueri sql.

Saya ingin menghapus baris baru karakter dari variabel itu karena saya ingin menggabungkan variabel ini dengan yang lain. Di bawah ini adalah kode:

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
sumber

Jawaban:

29

Jika Anda menggunakan bash, Anda dapat menggunakan Ekspansi Parameter:

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

Hal-hal berikut /bin/shjuga bisa digunakan:

dt="${dt%
}"                # Remove a trailing newline.
choroba
sumber
3
Hanya FYI, ketika Anda menggunakan ${var//a/}Anda tidak perlu menggunakan yang terakhir /, ${var//a}akan melakukan hal yang persis sama.
buru
Terima kasih semua. Di bawah ini berhasil dt = $ {dt // $ '\ n' /} # Hapus semua baris baru.
Pavani
Bagi mereka yang penasaran dengan sintaks lengkap, berikut adalah tautan ke dokumentasi bash: gnu.org/software/bash/manual/html_node/…
kalaxy
12

Kedengarannya Anda perlu "tr", sesuatu seperti:

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

man tr untuk detail, seperti biasa

sthysel
sumber
1

Ini berfungsi di Linux (bash):

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

Di Linux, atau sistem lain dengan utilitas tanggal GNU, ini juga berfungsi untuk mendapatkan nilai itu untuk dt: (tanpa melibatkan Oracle ...)

dt="$(date -d 'yesterday' +%Y%b%d)_$(date -d '7 days ago' +%Y%b%d)"
Gert van den Berg
sumber
+1 untuk menghindari sqlplus. Jika Anda menggunakan sistem tanpa tanggal GNU tetapi Anda memiliki 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

dari manual sqlplus Oracle

SET PAGES [IZE] {14 | n} Mengatur jumlah garis pada setiap halaman output. Anda dapat mengatur PAGESIZE ke nol untuk menekan semua judul, istirahat halaman, judul, baris kosong awal, dan informasi pemformatan lainnya.

jadi tambahkan set pagesize 0ke skrip Anda untuk menghindari judul baris kosong.

untuk sebagian besar skrip saya, saya menggunakan pengaturan dalam potongan kode berikut:

dt = `sqlplus -s user / pwd @ servicename <<EOF
nonaktifkan umpan balik
atur ukuran halaman 0
aktifkan trimout
aktifkan trimspool
setel baris 300
nonaktifkan gema
nonaktifkan verifikasi

pilih ganti (to_char ((sysdate-7), 'YYYYMonDD') || '_'
|| to_char ((sysdate-1), 'YYYYMonDD'), chr (10), '') dari dual;
keluar;
EOF`

gema "tes $ dt $ dt"
keajaiban173
sumber