grep -Eow '\w{10}' | grep -v '\(.\).*\1'
ऐसे शब्दों को शामिल करता है जिनमें दो समान अक्षर होते हैं।
grep -Eow '\w{10}' | grep -v '\(.\)\1'
वर्णों को दोहराने वाले लोगों को बाहर करता है।
POSIXly:
tr -cs '[:alnum:]_' '[\n*]' |
grep -xE '.{10}' |
grep -v '\(.\).*\1'
tr
sगैर-शब्द-वर्णों ( cअल्फा-न्यूमेरिक और अंडरस्कोर को लागू करना) के किसी भी समीकरण को एक नए वर्ण में परिवर्तित करके अपनी स्वयं की लाइन पर शब्द डालते हैं ।
या एक के साथ grep
:
tr -cs '[:alnum:]_' '[\n*]' |
grep -ve '^.\{0,9\}$' -e '.\{11\}' -e '\(.\).*\1'
(कम से कम 10 और 10 से अधिक वर्णों की रेखाओं को छोड़कर और कम से कम दो बार दिखने वाले वर्ण के साथ)।
grep
केवल एक के साथ (GNU grep PCRE समर्थन के साथ या pcregrep
):
grep -Po '\b(?:(\w)(?!\w*\1)){10}\b'
यही है, एक शब्द सीमा ( \b
) 10 शब्द वर्णों के अनुक्रम के बाद (बशर्ते कि प्रत्येक शब्द वर्णों के अनुक्रम के बाद और नकारात्मक लुक-अप पीसीआर ऑपरेटर का उपयोग करके स्वयं नहीं है (?!...)
)।
हम भाग्यशाली हैं कि यह यहाँ काम करता है, क्योंकि कई रेगीक्सप इंजन दोहराव वाले भागों के अंदर काम नहीं करते हैं।
ध्यान दें कि (कम से कम GNU grep के मेरे संस्करण के साथ)
grep -Pow '(?:(\w)(?!\w*\1)){10}'
काम नहीं करता है, लेकिन
grep -Pow '(?:(\w)(?!\w*\2)){10}'
करता है (के रूप में echo aa | grep -Pw '(.)\2'
) जो एक बग की तरह लगता है।
आप चाहेंगे:
grep -Po '(*UCP)\b(?:(\w)(?!\w*\1)){10}\b'
यदि आप चाहते हैं \w
या \b
किसी अक्षर को शब्द घटक के रूप में माना जाए और न केवल ASCII को गैर-ASCII स्थानों में।
एक अन्य विकल्प:
grep -Po '\b(?!\w*(\w)\w*\1)\w{10}\b'
यह एक शब्द सीमा है (एक शब्द वर्णों के अनुक्रम के बाद जिसका दोहराव नहीं होता है) जिसके बाद 10 शब्द अक्षर होते हैं।
संभवतः किसी के दिमाग के पीछे की चीजें:
- तुलनात्मक मामला संवेदनशील है, इसलिए
Babylonish
उदाहरण के लिए मिलान किया जाएगा, क्योंकि सभी वर्ण अलग-अलग होते हैं, भले ही दो B
एस, एक कम और एक ऊपरी मामला ( -i
उस को बदलने के लिए उपयोग करें)।
- के लिए
-w
, \w
और \b
, एक शब्द एक पत्र है (केवल ASCII के लिए केवल GNU के grep
लिए , [:alpha:]
यदि आपके लोकेल में वर्ण वर्ग का उपयोग करके -P
और (*UCP)
), दशमलव अंक या अंडरस्कोर ।
- इसका मतलब है कि
c'est
(एक शब्द की फ्रांसीसी परिभाषा के अनुसार दो शब्द) या it's
(एक शब्द की कुछ अंग्रेजी परिभाषाओं के अनुसार एक शब्द) या rendez-vous
(एक शब्द की फ्रांसीसी परिभाषा के अनुसार एक शब्द) एक शब्द नहीं माना जाता है।
- यहां तक कि
(*UCP)
, यूनिकोड संयोजन वर्णों को शब्द घटकों के रूप में नहीं माना जाता है, इसलिए téléphone
( $'t\u00e9le\u0301phone'
) को 10 वर्णों में से एक माना जाता है, जिनमें से एक गैर-अल्फ़ा है। défavorisé
( $'d\u00e9favorise\u0301'
) मिलान किया जाएगा भले ही यह दो é
हो गया है क्योंकि यह 10 अलग-अलग अल्फा वर्ण हैं जिनके बाद एक तीव्र उच्चारण (गैर-अल्फा का संयोजन होता है, इसलिए इसमें e
और इसके उच्चारण के बीच एक शब्द सीमा है )।