UNIX変数から改行を削除する


12

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"

回答:


29

を使用している場合は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}まったく同じです。
ラッシュ

みなさん、ありがとうございました。以下のことがうまくいきましたdt = $ {dt // $ '\ n' /}#すべての改行を削除します。
Pavani

:完全な構文で好奇心旺盛な方のために、ここでは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の日付ユーティリティを備えたその他のシステムでは、これはdtの値を取得するためにも機能します(Oracleを使用せずに...)

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

sqlplusを回避するための+1。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 '29

0

OracleのSQLPLUSマニュアル

ページ設定[IZE] {14 | n} 出力の各ページの行数を設定します。PAGESIZEをゼロに設定すると、すべての見出し、改ページ、タイトル、最初の空白行、およびその他のフォーマット情報を抑制できます。

したがってset pagesize 0、スクリプトにを追加して、見出しの空白行を避けます。

ほとんどのスクリプトでは、次のコード部分の設定を使用します。

dt = `sqlplus -s user / pwd @ servicename <<EOF
フィードバックをオフに設定
ページサイズを0に設定
トリムアウトをオンに設定
トリムスプールをオンに設定
線サイズ300を設定
エコーをオフに設定
検証をオフに設定

select replace(to_char((sysdate-7)、 'YYYYMonDD')|| '_'
|| to_char((sysdate-1)、 'YYYYMonDD')、chr(10)、 '')デュアルから;
出口;
EOF`

echo "テスト$ dt $ dt"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.