Shell

從變數中刪除所有空格、製表符、換行符等?

  • December 30, 2020

這是我得到的錯誤,它失敗了,因為一個變數的值應該是 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

sed 's/[[:space:]]//g'在輸出中留下換行符的原因是因為數據sed一次顯示為一行。因此,替換不能替換數據中的換行符(它們根本不是sed看到的數據的一部分)。

相反,您可以使用tr

tr -d '[:space:]'

這將刪除空格字元、換頁符、換行符、輸入符、水平製表符和垂直製表符。

在 ksh、bash 或 zsh 中:

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

在任何類似 Bourne 的 shell 中,您可以刪除前導和尾隨空格並將所有中間空格標準化為單個空格,如下所示:

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

set -f關閉萬用字元;如果您知道數據不包含任何字元\[?*,則可以省略它。

假設$IFS包含其預設值空格、製表符、換行符。其他空白字元(CR、VT、FF…)被單獨留下。

引用自:https://unix.stackexchange.com/questions/32569