मैं इस आदेश का उपयोग कर रहा हूं;

awk -v regex1='new[[:blank:]]+File\(' 'BEGIN{print "Regex1 =", regex1}'

जो मुझे चेतावनी देता है;

awk: warning: escape sequence `\(' treated as plain `(

जो प्रिंट करता है;

new[[:blank:]]+File( 

मैं मूल्य होना चाहता हूँ;

new[[:blank:]]+File\(

मैंने एस्केप वर्णों के लिए खाते में आदेश में संशोधन करने का प्रयास किया है, लेकिन हमेशा एक ही चेतावनी प्राप्त करें

awk
2
Michael Heneghan 15 अप्रैल 2021, 18:15

2 जवाब

मुझे लगता है कि गॉक और मॉक 1/2 भी भयानक लेकिन मूर्खतापूर्ण ऑक्टल विधि के साथ ठीक हैं जैसे okay

  -v regex1="new[[:blank:]]+File[\\050]"  # note the double quotes

एक बार जब इंजन पहली \\ परत निकाल लेता है, तो जिस रेगेक्स के खिलाफ परीक्षण किया जा रहा है वह बराबर है

/new[[:blank:]]+File[\050]/

जो जितना सुरक्षित है उतना ही सुरक्षित है। कारण यह क्यों मायने रखता है कि कुछ ऐसा है

/new[[:blank:]]+File[\(]/

क्या कुछ mawk/mawk2 पूरी तरह से शांत हैं लेकिन गॉक एक कष्टप्रद चेतावनी संदेश देगा। ऑक्टल (या [\x28]) उस क्रॉस-अजीब अजीबता से छुटकारा पाएं और समान कस्टम स्ट्रिंग रेगेक्स को सभी 3 में तैनात करने की अनुमति दें

(बीडब्ल्यूके मूल या एनएडब्ल्यूके आदि जैसे कम लोकप्रिय रूपों के खिलाफ परीक्षण नहीं किया गया है)।

ps : चूंकि मैं ऑक्टल कैविटीज़ के विषय पर हूं, इसलिए बाइनरी मोड में mawk/mawk2 और gawk सभी बाइट्स के लिए स्क्वायर ब्रैकेट ऑक्टल के साथ कूल हैं, जिसका अर्थ है

"[\\302-\\364][\\200-\\277]+"  # this happens to be a *very* rough proxy for UTF-8

सभी 3 के लिए मान्य है। यदि आप वास्तव में हेक्स लड़का बनना चाहते हैं, तो वही रेगेक्स बन जाता है

"[\\xC2-\\xF4][\\x80-\\xBF]+" 

हालांकि, जब भी आप किसी गैर-ASCII बाइट के चारों ओर वर्ग डालने का प्रयास करते हैं, तो यूनिकोड मोड में गॉक लोकेल के बारे में चिल्लाएगा। इसे रोकने के लिए, आपको बस या की तरह के एक समूह के साथ उन्हें सूचीबद्ध करना होगा:

(\302|\303|\304.....|\364)(\200|\201......|\277)+

इस तरह आप किसी भी मनमानी बाइट को संभालने के लिए गॉक यूनिकोड मोड प्राप्त कर सकते हैं और बाइनरी इनपुट डेटा (जो भी परिस्थितियां होती हैं) को संभालती हैं, और पूर्ण बेस 64 या यूआरआई प्लस एन्कोडिंग/डिकोडिंग भीतर से (साथ ही कुछ और जो आप चाहते हैं, जैसे SHA256 या LZMA आदि) ... अब तक मैंने "अवैध मल्टी बाइट" त्रुटि संदेश को थूकने के बिना एक MP4 फ़ाइल इनपुट को बेस 64 एनकोड करने के लिए यूनिकोड मोड में गॉक प्राप्त करने में कामयाबी हासिल की है।

..... और बाइनरी मोड में gawk और mawk को ज्यादातर UTF-8 जागरूक और सुरक्षित बनने के लिए प्राप्त करें।

"ज्यादातर" कैविएट होने के कारण मैंने मिनट के विवरण को लागू नहीं किया है जैसे कि सीधे सामान्यीकरण फॉर्म रूपांतरण करना, बजाय पायथन 3 को डंप करना और getline के माध्यम से परिणाम प्राप्त करना, या संशोधक भाषा विज्ञान के निशान को अपने इच्छित चरित्र के साथ रखना यदि मैं एक यूसी-सुरक्षित-सबस्ट्रिंग स्ट्रिंग-रिवर्सल करें।

1
RARE Kpop Manifesto 15 अप्रैल 2021, 17:56

यदि आप gnu awk का उपयोग करते हैं तो आप regexp शाब्दिक उपयोग कर सकते हैं @/.../ फ़ॉर्मैट और डबल एस्केपिंग से बचें:

awk -v regex1='@/new[[:blank:]]+File\(/' 'BEGIN{print "Regex1 =", regex1}'

Regex1 = new[[:blank:]]+File\(
2
anubhava 15 अप्रैल 2021, 15:43