याद कीजिए कि jq में भी वही डेटा टाइप होते हैं जो JSON में होते हैं।
JSON स्ट्रिंग को इस तरह बताता है:
स्ट्रिंग शून्य या अधिक यूनिकोड अक्षरों का एक क्रम होती है, जिसे दोहरे उद्धरण चिह्नों में रखा जाता है और जिसमें बैकस्लैश एस्केप का उपयोग होता है।
स्ट्रिंग के अंदर "खास" अक्षर डालने के लिए बैकस्लैश अक्षर का उपयोग कीजिए:
\" एक वास्तविक उद्धरण चिह्न,\\ एक वास्तविक बैकस्लैश,\n, \t, \r, \f, \b
\uAAAA, जहाँ A एक हेक्स अंक हैअक्षरों की संख्या जानने के लिए length फंक्शन का उपयोग कीजिए।
$ jq -cn --args '$ARGS.positional[] | length' "Hello world!" "❄🌡🤧🤒🏥🕰😀"
12
7
सबस्ट्रिंग निकालने के लिए स्लाइस नोटेशन का उपयोग किया जा सकता है।
इसका सिंटैक्स .[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 है।
किसी स्ट्रिंग को अक्षरों के ऐरे में बदलने की ज़रूरत अक्सर पड़ती है। यह करने के दो तरीके हैं:
खाली स्ट्रिंग पर अलग करना
"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]
implode, explode का उल्टा है।
index/1 फंक्शन का उपयोग कीजिए; इंडेक्स शून्य से शुरू होता है।
"hello" | index("el")' # => 1
अगर सबस्ट्रिंग स्ट्रिंग में नहीं है, तो परिणाम null होता है
"hello" | index("elk") # => null
स्ट्रिंग के अंदर \(expression) क्रम उस एक्सप्रेशन का परिणाम स्ट्रिंग में डाल देता है:
"The current datetime is \(now | strflocaltime("%c"))" # => "The current datetime is Wed Nov 16 17:06:33 2022"
ascii_downcase और ascii_upcase फंक्शन का उपयोग कीजिए।
jq में रेगुलर एक्सप्रेशन के लिए भरपूर समर्थन है: यह आगे के किसी पाठ का विषय होगा।
इस अभ्यास में आप लॉग एंट्री को प्रोसेस करेंगे।
हर लॉग लाइन एक स्ट्रिंग है जो इस तरह फॉर्मेट की गई है: "[<LEVEL>]: <MESSAGE>"।
यहाँ तीन अलग-अलग लॉग लेवल होते हैं:
INFOWARNINGERRORआपके पास तीन टास्क हैं। हर टास्क एक लॉग लाइन लेगा और आपसे उसके साथ कुछ करने को कहेगा। इन टास्क को हल करने के बहुत सारे तरीके हैं। ऊपर दिए गए उदाहरणों में से अपनी पसंदीदा तकनीक चुनिए और देखिए कि आप क्या बना सकते हैं।
message फंक्शन बनाइए जो लॉग लाइन का मैसेज लौटाए:
"[ERROR]: Invalid operation" | message
# => "Invalid operation"
लॉग लाइन के शुरू या अंत में मौजूद कोई भी खाली जगह हटा देनी चाहिए:
"[WARNING]: Disk almost full\r\n" | message
# => "Disk almost full"
log_level फंक्शन बनाइए जो लॉग लाइन का लॉग लेवल लौटाए। यह लेवल छोटे अक्षरों में लौटाया जाना चाहिए:
"[ERROR]: Invalid operation" | log_level
# => "error"
reformat फंक्शन बनाइए जो लॉग लाइन को फिर से फॉर्मेट करता है। यह मैसेज को पहले रखता है और उसके बाद लॉग लेवल को ब्रैकेट में लिखता है:
"[INFO]: Operation completed" | reformat
# => "Operation completed (info)"
Exercism पर साइन अप कीजिए और jq को 12 कॉन्सेप्ट75 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।