ट्रैक
/
jq
jq
/
सिलेबस
/
स्ट्रिंग
स्

स्ट्रिंग में 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 तक के अक्षर आते हैं, जहाँ 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 और अभ्यास अनलॉक कीजिए