Xóa dòng mới khỏi biến unix


12

Tôi có một biến có giá trị được tìm thấy bằng truy vấn sql.

Tôi muốn xóa charcater dòng mới khỏi biến đó vì tôi muốn nối biến này với biến kia. Dưới đây là mã:

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"

Câu trả lời:


29

Nếu bạn đang sử dụng bash, bạn có thể sử dụng Mở rộng tham số:

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

Sau đây cũng nên làm việc /bin/sh:

dt="${dt%
}"                # Remove a trailing newline.

3
Chỉ cần FYI, khi bạn đang sử dụng, ${var//a/}bạn không cần sử dụng lần cuối /, ${var//a}sẽ thực hiện chính xác như vậy.
vội vàng

Cảm ơn tất cả các bạn. Điều tốt nhất đã làm việc dt = $ {dt // $ '\ n' /} # Xóa tất cả các dòng mới.
Pavani

Đối với những người tò mò trong cú pháp đầy đủ, đây là một liên kết đến tài liệu bash: gnu.org/software/bash/manual/html_node/ Kẻ
kalax

12

Âm thanh như bạn cần "tr", đại loại như:

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

người đàn ông tr để biết chi tiết, như thường lệ


1

Công việc này trên Linux (bash):

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

Trên Linux, hoặc các hệ thống khác có tiện ích ngày của GNU, điều này cũng hoạt động để có được giá trị đó cho dt: (không liên quan đến Oracle ...)

dt="$(date -d 'yesterday' +%Y%b%d)_$(date -d '7 days ago' +%Y%b%d)"

+1 để tránh sqlplus. Nếu bạn đang sử dụng hệ thống không có ngày GNU nhưng bạn có 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

từ hướng dẫn sử dụng Oracle sqlplus

THIẾT LẬP PAGES [IZE] {14 | n} Đặt số lượng dòng trên mỗi trang đầu ra. Bạn có thể đặt PAGESIZE thành 0 để chặn tất cả các tiêu đề, ngắt trang, tiêu đề, dòng trống ban đầu và thông tin định dạng khác.

vì vậy hãy thêm một set pagesize 0tập lệnh của bạn để tránh một dòng trống tiêu đề.

đối với hầu hết các tập lệnh của tôi, tôi sử dụng các cài đặt trong đoạn mã sau:

dt = `sqlplus -s user / pwd @ tên dịch vụ << EOF
tắt phản hồi
đặt kích thước trang 0
thiết lập trang trí trên
đặt trimspool trên
đặt kích thước 300
tắt tiếng vang
đặt xác minh tắt

chọn thay thế (to_char ((sysdate-7), 'YYYYMonDD') || '_'
|| to_char ((sysdate-1), 'YYYYMonDD'), chr (10), '') từ kép;
lối ra;
EOF`

tiếng vang "kiểm tra $ dt $ dt"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.