Shell
從變數中刪除所有空格、製表符、換行符等?
這是我得到的錯誤,它失敗了,因為一個變數的值應該是 2 (我使用 a 得到這個
select * from tabel
)。我在那個變數中得到了空格。+ 0 != 2 ./setjobs[19]: 0: not found.
如何從該變數中刪除所有這些空格或換行符?可以
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)
這按建議工作:
| 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…)被單獨留下。