Użycie egrep do znalezienia wierszy zawierających 5-6 wielkich liter. (ale nie więcej niż 6)

1

Po pierwsze, jest to praca domowa i niestety muszę użyć egrep (i nie z -w lub coś podobnego).

Potrzebuję mojego grep, aby zwrócić wiersze, które mają dokładnie 5 lub 6 wielkich liter.

Wykonanie egrep [A-Z]{5,6} .filenamezwraca 5 i 6 liter, ale niestety także więcej słów z liter.

Na przykład na tej liście:

ASK
roger ROBERT gulliver
tom THOMAS
JONATHAN moore
MELISSA tenant

Potrzebuję go, by zwrócić tylko ROBERTA i THOMASA.

roger34
źródło
+1 dookoła, chciałbym mieć więcej okazji do używania wyrażeń regularnych w moim życiu zawodowym!
DCookie

Odpowiedzi:

3
egrep "^[^A-Z]*[A-Z]{5,6}[^A-Z]*$" .filename
Geeklab
źródło
Aktualizacja: wyraźnie mówisz o nie więcej niż 7 wielkich literach. Nie jestem pewien, co chcesz z małymi literami. Moje wyrażenie regularne pozwala na xROBERTx, a wyrażenie regularne cYrus odmawia.
Geeklab
2

Spróbuj z:

egrep '^[A-Z]{5,6}$'

gdzie ^i $pasują odpowiednio do początku i końca linii.

Cyrus
źródło
Zapomniałem wspomnieć, że słowa na liście nie były na początku ani na końcu wierszy, moje złe. Geeklab poniżej miał odpowiednią formułę dla alternatywnej wersji. Dzięki za pomoc.
roger34
0

Jeszcze inna wersja

a) ograniczone do 5 lub 6 wielkich liter tego słowa;

b) słowo może zawierać nieograniczoną liczbę małych liter, plus „-” i apostrof: „

c) używa znaku krawędzi słowa \ b (zero-width);

Znajduje to więcej niż twoją listę (co byś chciał) i spełnia wszystkie podane ograniczenia. Może to spowodować więcej niż się spodziewałeś, ponieważ pozwala również na dowolną liczbę małych liter między dużymi literami:

„\ b [a-z'-] ([AZ] [a-z'-] ) {5,6} \ b”

Znajdziesz: niesamowite JET-LI

Jane DeSILVA

Ale nie: stary MacDONALD

Rolnik
źródło