답변:
예를 들어 여기 에 설명 된대로 단어 간에 일치합니다 .
단어 경계에 해당하는 세 가지 다른 위치가 있습니다.
- 문자열에서 첫 번째 문자 앞에, 첫 번째 문자가 단어 문자 인 경우.
- 문자열에서 마지막 문자 다음에 마지막 문자가 단어 문자 인 경우
- 문자열에서 두 문자 사이에서 하나는 단어 문자이고 다른 하나는 단어 문자가 아닙니다.
각 경우에 대한 예는 다음과 같습니다.
문자열 foobar
의 경우 첫 번째 경우는
foobar
^-----here
문자열 foobar
의 경우 두 번째 경우는
foobar
^--here
문자열 foo bar
의 경우 세 번째 경우는
foo bar
^--here, because space is not a word character
단어 문자로 규정되는 것은 특정 정규식 구현에 따라 다릅니다. 그러나 모든 경우에 문자 ( [a-z]
및 [A-Z]
), 숫자 ( [0-9]
) 및 _
단어 문자로 간주됩니다.
따라서 게시 한 정규 표현식 ( \b[A-Z]+\b
) 예제 는 두 단어 경계 사이에 있으며 대문자만으로 구성된 가장 긴 문자열을 찾는 것을 의미합니다. 예를 들어 설명하기가 더 쉬울 수 있습니다.
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
(또는 /usr/xpg4/bin/egrep
)는 \b
이런 식으로 취급하지 않습니다 . 예를 들어 echo "FOOBAR" | egrep '\b[A-Z]+\b'
일치하지 않습니다.
egrep '\b[A-Z]+\b' filename.sh
그것을 분해하자 :
[A-Z]
문자 클래스에서 하나의 문자를 나타냅니다
[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
는 하나 이상의 대문자 발생을 나타냅니다. : 예 일치하는 것 A
, HELLO
, IS
, I
, ELEPHANT
, 등'\bINDIA\b'
: INDIA
대문자로 단어 를 검색하는 전체 단어 검색과 정확히 같습니다 . 그것은 것입니다 하지 일치 INDIANA
. 따라서 동일한 원칙을 적용하면 '\b[A-Z]+\b'
대문자로 된 하나 이상의 문자를 가진 전체 단어를 찾을 수 있습니다.egrep '\b[A-Z]+\b' filename.sh
파일에서 대문자로 된 하나 이상의 문자를 가진 단어를 검색합니다 filename.sh
.\b
-정확히 전체 단어 검색과 같습니다.
[azA-Z0-9_]
. 매뉴얼을 확인하십시오. 사용중인egrep(1)
정규 표현식에 대한 기증 일 수 있습니다.