단어 경계에 대해 혼란 나는 이것을 많이

나는 이것을 많이 연구했지만 여전히 명확하지 않습니다. 단어 경계 란 무엇입니까 ? 무엇을합니까?

예를 들어 누군가 누군가이 명령을 설명해 주시겠습니까?

egrep '\b[A-Z]+\b' filename.sh



답변

예를 들어 여기 에 설명 된대로 단어 간에 일치합니다 .

단어 경계에 해당하는 세 가지 다른 위치가 있습니다.

  1. 문자열에서 첫 번째 문자 앞에, 첫 번째 문자가 단어 문자 인 경우.
  2. 문자열에서 마지막 문자 다음에 마지막 문자가 단어 문자 인 경우
  3. 문자열에서 두 문자 사이에서 하나는 단어 문자이고 다른 하나는 단어 문자가 아닙니다.

각 경우에 대한 예는 다음과 같습니다.

  1. 문자열 foobar의 경우 첫 번째 경우는

     foobar
    ^-----here
    
  2. 문자열 foobar의 경우 두 번째 경우는

    foobar
          ^--here
    
  3. 문자열 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 '\b[A-Z]+\b' filename.sh

그것을 분해하자 :

  1. [A-Z]문자 클래스에서 하나의 문자를 나타냅니다
    [ABCDEFGHIJKLMNOPQRSTUVWXYZ].
  2. [A-Z]+는 하나 이상의 대문자 발생을 나타냅니다. : 예 일치하는 것 A, HELLO, IS, I, ELEPHANT, 등
  3. '\bINDIA\b': INDIA대문자로 단어 를 검색하는 전체 단어 검색과 정확히 같습니다 . 그것은 것입니다 하지 일치 INDIANA. 따라서 동일한 원칙을 적용하면 '\b[A-Z]+\b'대문자로 된 하나 이상의 문자를 가진 전체 단어를 찾을 수 있습니다.
  4. 따라서 egrep '\b[A-Z]+\b' filename.sh파일에서 대문자로 된 하나 이상의 문자를 가진 단어를 검색합니다 filename.sh.

\b -정확히 전체 단어 검색과 같습니다.


답변