단어 경계에 대해 혼란


13

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

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

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

1
"단어 경계"는 도구가 정의한 모든 것입니다. 일부는 공백 / 공간 또는 공백 / 공간을 단어 경계로 간주하고, 다른 하나는 "단어"를 구성된 것으로 간주합니다 [azA-Z0-9_]. 매뉴얼을 확인하십시오. 사용중인 egrep(1)정규 표현식에 대한 기증 일 수 있습니다.
vonbrand

답변:


12

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

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

  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(또는 /usr/xpg4/bin/egrep)는 \b이런 식으로 취급하지 않습니다 . 예를 들어 echo "FOOBAR" | egrep '\b[A-Z]+\b'일치하지 않습니다.
Peter

0
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 -정확히 전체 단어 검색과 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.