从Unix变量中删除换行符


13

我有一个变量的值是使用sql查询找到的。

我想从该变量中删除新行字符,因为我想将此变量与另一个变量连接起来。下面是代码:

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"

Answers:


30

如果使用bash,则可以使用参数扩展:

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

以下内容也应适用/bin/sh

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

3
仅供参考,当您使用时,${var//a/}不需要使用last /${var//a}将完全相同。
2012年

谢谢大家。下面的工作奏效了dt = $ {dt // $'\ n'/}#删除所有换行符。
帕瓦尼2012年

对于那些对完整语法感到好奇的人,这里是bash文档的链接:gnu.org/software/bash/manual/html_node/…–
kalaxy

12

听起来您需要“ tr”,例如:

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

像往常一样详细说明tr


1

在Linux(bash)上的这项工作:

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

在Linux或其他具有GNU date实用程序的系统上,这也可以为dt获得该值:(不涉及Oracle ...)

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

+1以避免sqlplus。如果您使用的系统没有GNU日期,但您拥有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 2012年

0

Oracle sqlplus手册中

SET PAGES [IZE] {14 | n} 设置输出的每一页上的行数。您可以将PAGESIZE设置为零,以禁止显示所有标题,分页符,标题,初始空白行和其他格式信息。

因此set pagesize 0,请在脚本中添加,以免出现空白行。

对于大多数脚本,我使用以下代码段中的设置:

dt =`sqlplus -s user / pwd @ servicename <<EOF
设置反馈
设置页面大小0
设置修剪
设置修剪
设定线条大小300
关闭回声
设置验证关闭

选择replace(to_char((sysdate-7),'YYYYMonDD')||'_'
|| to_char((sysdate-1),'YYYYMonDD'),chr(10),'')from dual;
出口;
EOF`

回声“测试$ dt $ dt”
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.