স্

স্ট্রিং মধ্যে jq

6টি অনুশীলনী

স্ট্রিং সম্পর্কে

মনে করুন, jq JSON-এর মতোই একই ডেটা টাইপ সাপোর্ট করে। JSON স্ট্রিং-কে এভাবে বর্ণনা করে:

একটি স্ট্রিং হলো শূন্য বা তার বেশি ইউনিকোড ক্যারেক্টারের একটি ক্রম, যা ডাবল কোটের ভেতরে লেখা হয় এবং ব্যাকস্ল্যাশ এস্কেপ ব্যবহার করে।

এস্কেপ সিকোয়েন্স

একটি স্ট্রিংয়ের ভেতরে "বিশেষ" ক্যারেক্টার বসাতে ব্যাকস্ল্যাশ ক্যারেক্টার ব্যবহার করুন:

  • \" একটি আক্ষরিক উদ্ধৃতি চিহ্ন,
  • \\ একটি আক্ষরিক ব্যাকস্ল্যাশ,
  • হোয়াইটস্পেস ক্যারেক্টার \n, \t, \r, \f, \b
  • ইউনিকোড ক্যারেক্টার \uAAAA, যেখানে A একটি হেক্স ডিজিট

স্ট্রিংয়ের দৈর্ঘ্য

ক্যারেক্টারের সংখ্যা বের করতে length ফাংশনটি ব্যবহার করুন।

$ jq -cn --args  '$ARGS.positional[] | length' "Hello world!" "❄🌡🤧🤒🏥🕰😀"
12
7

আসল বাইটের সংখ্যা বের করতে utf8bytelength ফাংশনটি ব্যবহার করুন।

$ jq -cn --args  '$ARGS.positional[] | utf8bytelength' "Hello world!" "❄🌡🤧🤒🏥🕰😀"
12
27

সাবস্ট্রিং

সাবস্ট্রিং বের করতে স্লাইস নোটেশন ব্যবহার করা যায়। সিনট্যাক্স হলো .[i:j]। যে সাবস্ট্রিংটি রিটার্ন হয় তার দৈর্ঘ্য j - i; এটি i ইনডেক্স (অন্তর্ভুক্ত) থেকে j ইনডেক্স (অন্তর্ভুক্ত নয়) পর্যন্ত ক্যারেক্টার দেয়। দুটি ইনডেক্সের যেকোনোটিই ঋণাত্মক হতে পারে; সেক্ষেত্রে এটি স্ট্রিংয়ের শেষ থেকে পিছনের দিকে গোনে। যেকোনো ইনডেক্স বাদও দেওয়া যায়; সেক্ষেত্রে সেটি স্ট্রিংয়ের শুরু বা শেষ বোঝায়। ইনডেক্স শুরু হয় শূন্য থেকে।

"abcdefghij"[3:6]   # => "def"
"abcdefghij"[3:]    # => "defghij"
"abcdefghij"[:-2]   # => "abcdefgh"

কনক্যাটেনেশন

স্ট্রিং জোড়া লাগাতে + ব্যবহার করুন:

"Hello" + " " + "world!"
# => "Hello world!"

স্ট্রিংয়ের একটি অ্যারে থাকলে add ব্যবহার করুন:

["Hello", " ", "world!"] | add
# => "Hello world!"

স্প্লিট ও জয়েন

স্প্লিট করতে split/1 ফাংশন বা / অপারেটর ব্যবহার করা হয়:

"Hello beautiful world!" | split(" ")   # => ["Hello", "beautiful", "world!"]
"Hello beautiful world!" / " "          # => ["Hello", "beautiful", "world!"]

split/1-এর বিপরীত হলো join/1।

একটি স্ট্রিংকে ক্যারেক্টারের অ্যারেতে রূপান্তর করা প্রায়ই দরকার হয়। এটি করার দুটি উপায় আছে:

  1. খালি স্ট্রিংয়ে স্প্লিট করা

    "Hi friend 😀" / ""   # => ["H","i"," ","f","r","i","e","n","d"," ","😀"]
    
  2. explode দিয়ে কোডপয়েন্ট-এর একটি অ্যারে তৈরি করা

    "Hi friend 😀" | explode   # => [72,105,32,102,114,105,101,110,100,32,128512]
    

    implode হলো explode-এর বিপরীত।

সাবস্ট্রিংয়ের ইনডেক্স খুঁজে বের করা

index/1 ফাংশনটি ব্যবহার করুন; ইনডেক্স শুরু হয় শূন্য থেকে।

"hello" | index("el")'   # => 1

স্ট্রিংয়ে সাবস্ট্রিংটি না থাকলে ফলাফল হয় null

"hello" | index("elk")   # => null

আরও কিছু কাজের ফাংশন হলো rindex/1 এবং indices।

স্ট্রিং ইন্টারপোলেশন

স্ট্রিংয়ের ভেতরে \(expression) লিখলে ওই এক্সপ্রেশনের ফলাফল স্ট্রিংটিতে যুক্ত হয়:

"The current datetime is \(now | strflocaltime("%c"))"   # => "The current datetime is Wed Nov 16 17:06:33 2022"

কেস কনভার্সন

একটি স্ট্রিংয়ের কেস বদলাতে ascii_downcase এবং ascii_upcase ফাংশন ব্যবহার করুন।

স্ট্রিংকে সংখ্যায় কাস্ট করা

স্ট্রিং থেকে সংখ্যা তৈরি করতে tonumber ফাংশন ব্যবহার করুন।

স্ট্রিংটিকে সংখ্যায় কাস্ট করা না গেলে এটি একটি এরর তোলে, তাই try-catch লাগতে পারে।

$ jq -cn --args '$ARGS.positional[] | [., tonumber]' 42 3.14 oops 1e6 0xbeef
["42",42]
["3.14",3.14]
jq: error (at <unknown>): Invalid numeric literal at EOF at line 1, column 4 (while parsing 'oops')

$ echo $?
5

$ jq -cn --args '$ARGS.positional[] | try [., tonumber] catch "not a number"' 42 3.14 oops 1e6 0xbeef
["42",42]
["3.14",3.14]
"not a number"
["1e6",1000000]
"not a number"

মনে রাখবেন, JSON সংখ্যা-তে হেক্স বা অক্টাল রূপ থাকে না, যা কিছু ভাষা সাপোর্ট করে।

অন্যান্য ফাংশন

এই ফাংশনগুলো সম্পর্কে আরও বিস্তারিত জানতে ম্যানুয়াল দেখুন:

  • একটি স্ট্রিং পুনরাবৃত্তি করা: *
  • কনটেইনমেন্ট পরীক্ষা করা: contains/1, inside/1, indices/1, index/1, rindex/1, startswith/1, endswith/1
  • ট্রিম করা: lsrimstr/1, rtrimstr/1
  • ফরম্যাটিং ফাংশন: @text, @json, @html, @uri, @csv, @tsv, @sh, @base64, @base64d

রেগুলার এক্সপ্রেশন

jq-তে রেগুলার এক্সপ্রেশনের জন্য সমৃদ্ধ সাপোর্ট আছে; এটি পরের একটি পাঠে আলোচনা করা হবে।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

স্ট্রিং শিখুন

অনুশীলন লক করা আছে

স্ট্রিং অনুশীলন করতে আরও 8টি অনুশীলনী আনলক করুন