একটি ভেরিয়েবল থেকে সমস্ত স্পেস, ট্যাব, নিউলাইন ইত্যাদি সরিয়ে দিচ্ছেন?


25

এটি আমি পেয়ে যাচ্ছি ত্রুটি এবং এটি একটি ভেরিয়েবলের কারণে ব্যর্থ হয় যার মান 2 বলে মনে করা হয় (এটি ব্যবহার করে আমি এটি পাচ্ছি 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

1
আপনি নির্বাচন বিবৃতিতে একটি স্ট্রিং কাস্ট করতে পারেন। এটি কীভাবে করা হয় তা ডাটাবেস, সিবাস, ওরাকল, মাইএসকিউএল ইত্যাদির উপর নির্ভর করে
বিএসডি

1
আমি কীভাবে এটি করব, আমার কাছে ওরাকল 9i আছে
মুনিশ

1
সেড ব্যবহার করে এটি | sed 's/[[:space:]]//g'হোয়াইটস্পেস ভেঙে পড়বে
বিএসডি

ধন্যবাদ কিছুটা কাজ করে তবে তবুও ভেরিয়েবলের মানগুলি আসেset_jobs_count= 2
12:37

শেলের উপর নির্ভর করে আপনি কোনও বাহ্যিক সরঞ্জাম ছাড়াই এটি করতে সক্ষম হতে পারেন। দেখুন stackoverflow.com/a/3352015/587717
EDD স্টীল

উত্তর:


38

আপনি trযেমনটি ব্যবহার করতে পারেন tr -d '\040\011\012\015'যা স্পেস, ট্যাব, গাড়ীর রিটার্ন এবং নিউলাইনগুলি সরিয়ে ফেলবে।


3
\040\011\012\015ওভার ব্যবহারের কোনও সুবিধা আছে [:space:]?
নিক

খুব পুরানো ইউএনআইএক্স সংস্করণ সহ বহনযোগ্যতা হ'ল আমি কেবলমাত্র --- পুরানোটি ইউনিক্স সংস্করণটি পসিক্স ১. এর পূর্বাভাসের কথা ভাবতে পারি
কাইল জোন্স

1
%আউটপুট শেষে অক্ষরের সাথে এটি কী ? অনুমান করুন এটি আমাকে বলার কোনও ধরণের লিনাক্স উপায় আছে যে আউটপুটটি সেখানে থামবে?
অ্যাট্রিপস

4

Ksh, বাশ বা 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
মুনিশ

@BinaryZebra globbing ঘটবে set -- $set_jobs_count। যেহেতু set_jobs_count=$*সমান এবং কেবল যখন সমাবর্তন হয় তখনই সমান হয় এবং অ্যাসাইনমেন্টের ডান হাতটি ডাবল-কোটেড স্ট্রিংয়ের মতো একইভাবে পার্স করা হয়। set_jobs_count="$@"$*$@
গিলস 'অশুভ হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.