याद कीजिए कि 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 तक के अक्षर आते हैं, जहाँ 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 में रेगुलर एक्सप्रेशन के लिए बहुत अच्छा समर्थन है: यह आगे के किसी पाठ का विषय होगा।