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

mun*_*ish 34 shell sed whitespace tr newlines

这是我得到的错误,它失败是因为一个变量的值应该是 2(我使用 a 得到这个select * from tabel)。我在那个变量中得到了空格。

+ 0 != 
         2
./setjobs[19]: 0:  not found.
Run Code Online (Sandbox Code Playgroud)

如何从该变量中删除所有这些空格或换行符?可以tr,,sed或任何帮助?

这就是我正在做的:

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)
Run Code Online (Sandbox Code Playgroud)

这按建议工作:

| sed 's/[[:space:]]//g'
Run Code Online (Sandbox Code Playgroud)

但我仍然获得一个值,如:

  set_jobs_count=
  2
Run Code Online (Sandbox Code Playgroud)

Kyl*_*nes 54

sed 's/[[:space:]]//g'在输出中留下换行符的原因是因为数据一次显示为sed一行。因此,替换不能替换数据中的换行符(它们根本不是sed看到的数据的一部分)。

相反,您可以使用 tr

tr -d '[:space:]'
Run Code Online (Sandbox Code Playgroud)

这将删除空格字符、换页符、换行符、回车符、水平制表符和垂直制表符。


Gil*_*il' 6

在 ksh、bash 或 zsh 中:

set_jobs_count=…
set_jobs_count=${set_jobs_count//[[:space:]]/}
Run Code Online (Sandbox Code Playgroud)

在任何类似 Bourne 的 shell 中,您可以删除前导和尾随空格并将所有中间空格规范化为单个空格,如下所示:

set -f
set -- $set_jobs_count
set_jobs_count="$*"
set +f
Run Code Online (Sandbox Code Playgroud)

set -f关闭通配;如果您知道数据不包含任何字符\[?*,则可以省略它。

假设$IFS包含空格、制表符、换行符的默认值。其他空白字符(CR、VT、FF...)被保留。