Dużo to badam, ale nadal nie jestem tego pewien. Co oznacza granica słów ? Co to robi?
Czy na przykład ktoś mógłby mi wyjaśnić to polecenie?
egrep '\b[A-Z]+\b' filename.sh
grep
regular-expression
użytkownik36683
źródło
źródło
[azA-Z0-9_]
. Sprawdź instrukcję pod kątemegrep(1)
być może podwojenia używanych wyrażeń regularnych.Odpowiedzi:
Jak opisano tutaj , na przykład, pasuje między słowami:
Oto przykłady każdego z tych przypadków:
W przypadku ciągu
foobar
pierwsza wielkość liter jest zgodnaW przypadku ciągu
foobar
druga wielkość liter jest zgodnaW przypadku ciągu
foo bar
trzeci przypadek będzie pasowałTo, co kwalifikuje się jako znak słowa, zależy od konkretnej implementacji wyrażenia regularnego. Jednak we wszystkich przypadkach litery (
[a-z]
i[A-Z]
), cyfry ([0-9]
) i_
są uważane za znaki słowne.Tak więc przykładowe wyrażenie regularne, które napisałeś (
\b[A-Z]+\b
), oznacza znalezienie najdłuższego ciągu między dwoma granicami słów i składającego się wyłącznie z wielkich liter. Łatwiej wyjaśnić to na przykładzie:źródło
egrep
(ani/usr/xpg4/bin/egrep
) nie traktuje\b
tego w ten sposób. Na przykładecho "FOOBAR" | egrep '\b[A-Z]+\b'
nie pasuje.Rozbijmy to:
[A-Z]
reprezentuje dowolny znak w klasie znaków[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
reprezentuje jedno lub więcej wystąpień wielkich liter. Przykład dopasowania byłoby:A
,HELLO
,IS
,I
,ELEPHANT
, itd.'\bINDIA\b'
: jest dokładnie jak CAŁE SŁOWO, szukając słowaINDIA
wielkimi literami. Byłoby nie pasujeINDIANA
. Stosując tę samą zasadę -'\b[A-Z]+\b'
szukałby całych słów zawierających jedną lub więcej liter wielkimi literami.egrep '\b[A-Z]+\b' filename.sh
ten sposób szukałby słów zawierających jedną lub więcej liter wielkimi literami w plikufilename.sh
.\b
- jest dokładnie jak wyszukiwanie całego słowa.źródło