참조

참조

의 매뉴얼 페이지에서 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.

그러나 나는 아직도 그 차이를 알 수 없다. 나에게는 \b단어 경계에 대한 Perl의 표기법이 있고 \<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.

공백에도 동일한 작업을 수행할 수 있습니다(공백을 표시하기 위해 고양이가 추가됨).

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

$ 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.

관련 정보