Bir değişkenden tüm boşlukları, sekmeleri, yeni satırları vb. Kaldırmak?


25

Bu alıyorum hatadır ve değeri 2 olması gereken bir değişken nedeniyle başarısız oluyor (Bunu a kullanarak alıyorum select * from tabel). Bu değişkende boşluk alıyorum.

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

Tüm bu boşlukları veya yeni bir satırı bu değişkenden nasıl kaldırırım? Can tr, sed, ya da bir şey yardımcı olabilir?

Ben ne yapıyorum?

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)

Bu önerilen şekilde çalışır:

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

Ama yine de şöyle bir değer elde ediyorum:

  set_jobs_count=
  2

1
Select ifadesinde bir int için bir dize atabilirsiniz. Bunun nasıl yapılacağı veritabanına, Sybase, Oracle, MySQL, vb. Bağlıdır
bsd

1
nasıl yaparım, 9i kahin var
munish

1
sed kullanarak | sed 's/[[:space:]]//g'boşlukları daraltmak için
bsd

teşekkürler bir dereceye kadar çalışıyor ama yine de değişkenin değerleri gibi geliyorset_jobs_count= 2
munish

Kabuğa bağlı olarak, herhangi bir dış alet kullanmadan yapabilirsiniz. Bkz stackoverflow.com/a/3352015/587717
Edd Çelik

Yanıtlar:


38

Sen kullanabilirsiniz trolduğu gibi tr -d '\040\011\012\015'boşluklar, sekmeler satır başlarını ve yeni satır kaldıracak olan.


3
\040\011\012\015Üzerinde kullanmanın bir avantajı var mı [:space:]?
Nick

Çok eski UNIX sürümleriyle taşınabilirlik, UNIX sürümünün POSIX .
Kyle Jones

1
%Çıktının sonundaki karakterin nesi var ? Sanırım çıktının orada durduğunu söylemenin bir tür Linux yolu var mı?
atripes

4

Ksh, bash veya zsh cinsinden:

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

Herhangi bir kabukta, öndeki ve sondaki boşlukları kaldırabilir ve tüm ara boşlukları aşağıdaki gibi tek bir alana normalleştirebilirsiniz:

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

set +fglobbing'i kapatır; Verilerin hiçbir karakter içermediğini \[?*biliyorsanız, ihmal edebilirsiniz.


ilginç cevap +1
munish

@BinaryZebra Küreselleşme oluyor set -- $set_jobs_count. bu yana set_jobs_count=$*eşittir ve yalnızca alıntı yapılmadan ve bir ödevin sağ tarafı çift tırnaklı bir dizeyle aynı şekilde ayrıştırıldığında eşdeğerdir. set_jobs_count="$@"$*$@
Gilles 'SO- kötülük olmayı'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.