인용하다

인용하다

맨 페이지에서 grep나는 본다.

The symbols \< and \> respectively match the empty string at the beginning and  
end of a word.  The symbol \b matches the  empty  string at  the  edge  of  a  word.

그러나 나는 아직도 그 차이를 알 수 없다. 나에게는 \bPerl의 단어 경계 표기법이지만 \<Vim의 표기법도 같은 목적으로 사용됩니다.
추신: 영어는 제 모국어가 아닙니다. 차이가 분명해 보인다면 용서해주세요.

답변1

\<단어의 시작 부분과 일치합니다.
\>단어의 끝 부분과 일치합니다.
\b두 경계 모두 일치합니다(끝 또는 시작에 있는 경우).

이러한 특수 문자의 중요한 점은 단어 경계 자체가 아닌 빈 문자열과 일치한다는 것입니다. 단어 경계는 Posix 표기법 (문자 a~Z, 숫자 및)으로 표시되는 문자 집합과 반대입니다 \w. [_[:alnum:]]_

마침내,Graeme은 매우 흥미로운 예를 발견했습니다.:

$ echo 'acegi   z' | grep -o '[acegi ]*\>' | cat -A
acegi$
$ echo 'acegi   z' | grep -o '[acegi ]*\b' | cat -A
acegi   $ 

지금은 이 예에서는 단어 경계보다는 단어의 끝을 정확히 일치시키는 것이 유용한 경우가 있음을 보여줍니다. 단어의 끝을 일치시키면 일치하는 공백 문자를 사용하지 않아도 되기 때문입니다.
따라서 더 유용한 예를 들어 보겠습니다. 단어가 아닌 문자와 단어가 아닌 문자의 끝을 일치시키려는 경우에는 작동하지 않지만 \>아마도 \b이 특정 경우에는 작동할 것입니다. 다음 단어의 시작.

지금까지는 어떤 예도 생각할 수 없습니다. 하지만 내 생각에는 그것이 의미가 있는 몇 가지 사용 사례가 있을 수 있지만 내 생각에는 \b모호하게 쓸 때와 같이 가독성 목적일 뿐이지만 시작이나 끝 부분에 단어를 정확하게 제공하면 일반 구문을 더 잘 이해할 수 있습니다. 읽는 사람의 표정.

답변2

제목에 있는 질문에 대답하시겠습니까?

\b차이점은 무엇 입니까 \<?

거의 없음. 둘 다 일치경계, 단어와 비단어 사이의 전환.

오직인위적인차이점은 다음과 같습니다.

  • \b경계 일치둘 다단어의 시작과 끝.
  • 유일하게 \<일치하는 것은시작한 문장.
  • 유일하게 \>일치하는 것은한 문장.

이것실제차이점은 다음과 같습니다.

$ echo ',,abc...' | grep -o '[abc.,]*'
,,abc...                                   # match the whole string

$ echo ',,abc...' | grep -o '[abc.,]*\b'
,,abc                                      # to the rightmost (due to *) word boundary.

$ echo ',,abc...' | grep -o '[abc.,]*\>'
,,abc                                      # match to the same point (in this case).

$ echo ',,abc...' | grep -o '[abc.,]*\<'   
,,                                         # match to the rightmost **start** of a word.

공백에도 동일한 작업을 수행할 수 있습니다(공백을 표시하려면 cat을 추가하세요).

가장 오른쪽의 "단어 경계"까지(모든)(공백에 주의):

$ echo 'abcd     abcd    Z' | grep -o '[a-z ]*\b' | cat -A
abcd     abcd    $

가장 오른쪽의 "단어 시작"(같은 지점)까지:

$ echo 'abcd     abcd    Z' | grep -o '[a-z ]*\<' | cat -A
abcd     abcd    $

가장 오른쪽 "끝"까지(후행 공백 없음):

$ echo 'abcd     abcd    Z' | grep -o '[a-z ]*\>' | cat -A
abcd     abcd$

또는 sed를 사용하세요.

네 단어 경계:

$ echo "abc %-= def." | sed 's/\b/ |>X<| /g'
 |>X<| abc |>X<|  %-=  |>X<| def |>X<| .

두 단어의 시작:

$ echo "abc %-= def." | sed 's/\</ |>X<| /g'
 |>X<| abc %-=  |>X<| def.

그리고 단어의 두 가지 결말은 다음과 같습니다.

$ echo "abc %-= def." | sed 's/\>/ |>X<| /g'
abc |>X<|  %-= def |>X<| .

인용하다

GNU sed의 정보:

'\b'는
단어 경계와 일치합니다. 즉, 왼쪽 문자가 "단어" 문자이고 오른쪽 문자가 "비단어" 문자인 경우 일치하며 그 반대의 경우도 마찬가지입니다.

     $ echo "abc %-= def." | sed 's/\b/X/g'
     XabcX %-= XdefX.

시작

'<'는 단어의 시작과 일치합니다.

     $ echo "abc %-= def." | sed 's/\</X/g'
     Xabc %-= Xdef.

'>'는 단어의 끝과 일치합니다.

     $ echo "abc %-= def." | sed 's/\>/X/g'
     abcX %-= defX.

관련 정보