変数からすべてのスペース、タブ、改行などを削除しますか?


25

これは私が得ているエラーであり、値が2になるはずの変数のために失敗しています(これを使用してこれを取得していますselect * from tabel)。その変数にスペースが入っています。

+ 0 != 
         2
./setjobs[19]: 0:  not found.

その変数からすべてのスペースまたは改行を削除するにはどうすればよいですか?缶trsedあるいは何の助け?

これは私がやっていること:

set_jobs_count=$(echo  "set heading off;
      select count(*) from oppar_db
      where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \
  sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME)

これは提案どおりに機能します。

| sed 's/[[:space:]]//g'

しかし、私はまだ次のような値を取得します:

  set_jobs_count=
  2

1
selectステートメントで文字列をintにキャストできます。その方法は、データベース、Sybase、Oracle、MySQLなどに依存します
。– bsd

1
どうすればいいですか、Oracle 9iがあります
12

1
sedを使用すると、| sed 's/[[:space:]]//g'空白が折りたたまれます
bsd

おかげである程度は機能しますが、変数の値は次のようになりますset_jobs_count= 2
12

シェルによっては、外部ツールなしで実行できる場合があります。参照してくださいstackoverflow.com/a/3352015/587717
エドスチール

回答:


38

のようにを使用できますtrtr -d '\040\011\012\015'スペース、タブ、キャリッジリターン、改行を削除します。


3
\040\011\012\015over を使用する利点はあり[:space:]ますか?
ニック

非常に古いUNIXバージョンとの移植性が、私が考えることができる唯一の理由です--- UNIXバージョンがPOSIX.1よりも前のものであるほど十分に古いです。
カイルジョーンズ

1
%出力の最後の文字は何ですか?出力がそこで停止することをLinuxに伝える方法があると思いますか?
ストライプ

4

ksh、bash、またはzshの場合:

set_jobs_count=…
set_jobs_count=${set_jobs_count//[[:space:]]/}

どのシェルでも、先頭と末尾の空白を削除し、次のようにすべての中間空白を単一のスペースに正規化できます。

set +f
set -- $set_jobs_count
set_jobs_count=$*
set -f

set +fグロビングをオフにします。データに文字が含まれていないことがわかっている場合は\[?*、省略できます。


興味深い回答+1
塗りつぶし

@BinaryZebraグロビングはで発生しset -- $set_jobs_countます。set_jobs_count=$*同等であるset_jobs_count="$@"ので、$*そして$@引用符で囲まれていないと割り当ての右辺が二重引用符で囲まれた文字列と同じ方法で解析される場合にのみ等価です。
ジル 'SO-悪であるのをやめる'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.