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.


+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

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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.