মনে করুন, 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!"]
একটি স্ট্রিংকে ক্যারেক্টারের অ্যারেতে রূপান্তর করা প্রায়ই দরকার হয়। এটি করার দুটি উপায় আছে:
খালি স্ট্রিংয়ে স্প্লিট করা
"Hi friend 😀" / "" # => ["H","i"," ","f","r","i","e","n","d"," ","😀"]
explode দিয়ে কোডপয়েন্ট-এর একটি অ্যারে তৈরি করা
"Hi friend 😀" | explode # => [72,105,32,102,114,105,101,110,100,32,128512]
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-তে রেগুলার এক্সপ্রেশনের জন্য সমৃদ্ধ সাপোর্ট আছে; এটি পরের একটি পাঠে আলোচনা করা হবে।