从变量中删除所有空格,制表符,换行符等?


25

这是我遇到的错误,由于一个变量的值应该为2(我使用a来获取)而失败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
munish

1
使用sed | sed 's/[[:space:]]//g'折叠空白
bsd

感谢工作到一定程度,但变量的值仍然像set_jobs_count= 2
munish 2012年

根据外壳的不同,您可能无需任何外部工具即可完成此操作。参见stackoverflow.com/a/3352015/587717
Edd Steel 2012年

Answers:


38

您可以使用tr和中的一样tr -d '\040\011\012\015',它将删除空格,制表符,回车符和换行符。


3
使用\040\011\012\015over 有优势[:space:]吗?
尼克

我可以想到的唯一理由是,非常老的UNIX版本具有可移植性-足够老,使得UNIX版本早于POSIX.1
凯尔·琼斯

1
%输出末尾的字符是什么?猜猜这是某种Linux方式告诉我输出停止在那儿吗?
atripes

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
取消了2012年

@BinaryZebra发生在set -- $set_jobs_countset_jobs_count=$*相当于set_jobs_count="$@",因为$*$@不带引号和分配的右侧被解析的方式为双引号字符串一样时只相当于。
吉尔斯(Gillles)“所以-别再作恶了”
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.