从 unix 变量中删除换行符

从 unix 变量中删除换行符

我有一个变量,其值是使用 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"

答案1

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

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

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

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

答案2

听起来你需要“tr”,比如:

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

像往常一样 man tr 了解详细信息

答案3

这在 Linux 上工作(bash):

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

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

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

答案4

来自Oracle sqlplus手册

设置页面[IZE] {14 | n} 设置每页输出的行数。您可以将 PAGESIZE 设置为零以抑制所有标题、分页符、标题、初始空行和其他格式信息。

set pagesize 0因此,在脚本中添加 a以避免出现标题空行。

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

dt=`sqlplus -s 用户/pwd@服务名 < < EOF
关闭反馈
设置页面大小 0
将修剪设置为打开
将修剪线设置为打开
设置线宽300
设置回声关闭
设置验证关闭

选择替换(to_char((sysdate-7),'YYYYMonDD')||'_'
||to_char((sysdate-1),'YYYYMonDD'),chr(10), '') 来自 Dual;
出口;
EOF`

回显“测试$dt$dt”

相关内容