grep -Eow '\w{10}' | grep -v '\(.\).*\1'
İki özdeş karaktere sahip kelimeleri içermez.
grep -Eow '\w{10}' | grep -v '\(.\)\1'
yinelenen karakterleri olanları hariç tutar.
POSIXly:
tr -cs '[:alnum:]_' '[\n*]' |
grep -xE '.{10}' |
grep -v '\(.\).*\1'
tr
ssözcük olmayan karakterleri ( calfa-sayısal ve alt çizgi omplementi) herhangi bir denklemini yeni satır karakterine dönüştürerek sözcükleri kendi satırlarına koyar .
Veya biriyle grep
:
tr -cs '[:alnum:]_' '[\n*]' |
grep -ve '^.\{0,9\}$' -e '.\{11\}' -e '\(.\).*\1'
(10'dan az ve 10 karakterden ve karakterleri en az iki kez görünen satırları hariç tutun).
Biri ile grep
sadece (GNU grep ile PCRE destek veya pcregrep
):
grep -Po '\b(?:(\w)(?!\w*\1)){10}\b'
Yani, bir kelime sınırını ( \b
) takip eden 10 kelime karakterinden oluşan bir sekans (her birinin negatif karakterli PCRE operatörünü kullanarak bir kelime karakterleri ve kendilerinin takip etmesi şartıyla (?!...)
).
Burada çalıştığı için şanslıyız, çünkü pek çok regexp motoru, tekrar eden parçaların içindeki geri referanslarla çalışmaz.
(GNU grep sürümümle en azından)
grep -Pow '(?:(\w)(?!\w*\1)){10}'
Çalışmıyor
grep -Pow '(?:(\w)(?!\w*\2)){10}'
echo aa | grep -Pw '(.)\2'
bir böcek gibi ses çıkarır (as ).
İsteyebilirsin:
grep -Po '(*UCP)\b(?:(\w)(?!\w*\1)){10}\b'
İsterseniz \w
veya \b
bir kelime bileşeni olarak herhangi bir harf ve ASCII olmayan yerel ayarlarda sadece ASCII olanları dikkate almak.
Başka bir alternatif:
grep -Po '\b(?!\w*(\w)\w*\1)\w{10}\b'
Bu bir kelime sınırıdır (biri tekrar eden bir kelime karakterleri dizisi tarafından takip edilmeyen) ve ardından 10 kelime karakteri.
Muhtemelen birinin zihninde olması gereken şeyler:
- Karşılaştırma, büyük / küçük harfe duyarlıdır; bu nedenle
Babylonish
, örneğin, iki B
s, bir küçük ve bir büyük büyük harf olmasına rağmen tüm karakterler farklı olduğundan (örneğin bunu değiştirmek için kullanılır) eşleşir -i
.
- için
-w
, \w
ve \b
, bir kelime bir harf (ASCII olanlar, sadece GNU içindir grep
şimdilik , [:alpha:]
yerdeki karakter sınıfı kullanılıyorsa -P
ve (*UCP)
), ondalık basamak veya alt çizgi .
- Bu,
c'est
(bir kelimenin Fransızca tanımına göre iki kelime) veya it's
(bir kelimenin bazı İngilizce tanımlarına göre bir kelime) veya rendez-vous
(bir kelimenin Fransızca tanımına göre bir kelime) bir kelime olarak kabul edilmez.
- Bununla birlikte
(*UCP)
, Unicode birleştirme karakterleri kelime bileşenleri olarak kabul edilmez, bu nedenle téléphone
( $'t\u00e9le\u0301phone'
) biri alfa olmayan 10 karakter olarak kabul edilir. défavorisé
( $'d\u00e9favorise\u0301'
) iki olmasına rağmen eşleşir, é
çünkü 10 farklı alfa karakterinden sonra akut aksanı birleştirir (alfa olmayan, yani e
aksanı ve arasında bir kelime sınırı vardır ).