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
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
Odpowiedzi:
Jak opisano tutaj , na przykład, pasuje między słowami:
Istnieją trzy różne pozycje, które kwalifikują się jako granice słów:
- Przed pierwszym znakiem w ciągu, jeśli pierwszy znak jest znakiem słownym.
- Po ostatnim znaku w ciągu, jeśli ostatni znak jest znakiem słownym.
- Pomiędzy dwoma znakami w ciągu, gdzie jeden jest znakiem słownym, a drugi nie jest znakiem słownym.
Oto przykłady każdego z tych przypadków:
W przypadku ciągu foobarpierwsza wielkość liter jest zgodna
foobar
^-----here
W przypadku ciągu foobardruga wielkość liter jest zgodna
foobar
^--here
W przypadku ciągu foo bartrzeci przypadek będzie pasował
foo bar
^--here, because space is not a word character
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:
echo "FOOBAR" | egrep '\b[A-Z]+\b' # Works
echo "FOO BAR" | egrep '\b[A-Z]+\b' # Works
echo "aFOOBARb" | egrep '\b[A-Z]+\b' # Does not work, we want capitals only
echo "12345" | egrep '\b[A-Za]+\b' # Does not work, no letters
echo "1FOOBAR2" | egrep '\b[A-Z]+\b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep '\b[A-Z]+\b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep '\b[A-Z]+\b' # Works, # and $ are not word chars
egrep(ani /usr/xpg4/bin/egrep) nie traktuje \btego w ten sposób. Na przykład echo "FOOBAR" | egrep '\b[A-Z]+\b'nie pasuje.
egrep '\b[A-Z]+\b' filename.sh
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łowa INDIAwielkimi literami. Byłoby nie pasuje INDIANA. 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.shten sposób szukałby słów zawierających jedną lub więcej liter wielkimi literami w pliku filename.sh.\b - jest dokładnie jak wyszukiwanie całego słowa.
[azA-Z0-9_]. Sprawdź instrukcję pod kątemegrep(1)być może podwojenia używanych wyrażeń regularnych.