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"

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.

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


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

+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"
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.